|
이성제 님이 쓰신 글 :
: spy처럼 프로그램제목을 가져오고 싶습니다
:
: 그래서 그 프로그램 제목을 가지고 해당 프로그램을 종료 하고 싶은데요.
:
: 종료 소스는 대충 아는데 프로그램의 이름을 가져오는게 힘드네요.
:
: 따른 답변 기다리겠습니다.
1. Process 목록
lstvProcess->Items->Clear();
TListItem *lstvItem;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
BOOL bcontiue = Process32First(hSnapshot,&pe32);
String pathname;
while(bcontiue)
{
lstvItem = lstvProcess->Items->Add();
lstvItem->Data = new PROCESSENTRY32(pe32);
lstvItem->Caption = IntToHexStr(pe32.th32ProcessID); //IntToHexStr: User-defined function
lstvItem->SubItems->Add(IntToHexStr(pe32.th32ParentProcessID));
lstvItem->SubItems->Add(pe32.cntThreads);
lstvItem->SubItems->Add(pe32.cntUsage);
pathname = GetModuleFilePathByProcessID(pe32.th32ProcessID); //GetModuleFilePathByProcessID: User-defined function
if(pathname.IsEmpty()){
lstvItem->SubItems->Add(pe32.szExeFile);
}else{
lstvItem->SubItems->Add(ExtractFileName(pathname)+"("+ExtractFilePath(pathname)+")");
}
bcontiue = Process32Next(hSnapshot,&pe32);
}
CloseHandle(hSnapshot);
2. NT 계열의 OS에서는 KillProcess하려면 해당 Process에 대해 해당 권한이 포함된 권한으로 Process를 Open해야 합니다. 경우에 따라서는 해당권한으로 Process를 Open하지 못할 수도 있습니다. 이때는 AdjustTokenPrivileges WinAPI를 사용하여 OpenProcess할 수 있는 권한을 얻어야 합니다.
|