2011-08-17 5 views
0

C++ 프로그램에서 프로세스를 검색하고 특정 file.exe가 실행 중일 때 프로그램에서 무언가 (무관 한) 작업을 수행합니다. 이 일을 도와 주시겠습니까?프로세스를 검색하고 특정 작업이있을 때 작업을 수행하십시오.

인터넷에서 뭔가를 발견했습니다. 이거 괜찮아 ?

CreateMutex(NULL, FALSE, NAMEofTHEprocess_exe); 
if (GetLastError() == ERROR_ALREADY_EXISTS)return 0; 

내 프로그램에서 사용해도 되나요? 나는 뮤텍스가 무엇인지 모른다.

+0

음 ... 나는 바이러스가 바이러스 백신이로드 될 때 감지하는 기억이 가장 일반적인 사용 사례 ... –

답변

2

다음은 Windows에서 실행중인 프로세스의 기본 열거입니다 :

#define WINVER  0x0500 
#define _WIN32_WINNT 0x0500 
#define PSAPI_VERSION 1 
#include <windows.h> 
#include <tchar.h> 
#include <psapi.h> 
#include <sddl.h> 

void ListProcesses() 
{ 
    DWORD aProcesses[1024], cbNeeded, cProcesses; 
    MEMORYSTATUSEX statex; 

    statex.dwLength = sizeof(statex); 

    ::GlobalMemoryStatusEx(&statex); 

    ::EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded); 
    cProcesses = cbNeeded/sizeof(DWORD); 

    for (size_t i = 0; i < cProcesses; ++i) 
    if(aProcesses[i] != 0) 
     std::cout << "PID: " << aProcesses[i] << ", Name: " << getProcessNameByID(aProcesses[i]) << std::endl; 
} 

당신은 결정을 내릴 getProcessNameByID와 마지막 이름 룩업을 사용할 수 있습니다. 여기 getProcessPathNameByID에 대한 코드는 다음과 같습니다

#include <tchar.h> 

std::string getProcessNameByHandle(HANDLE hProcess) 
{ 
    if (NULL == hProcess) 
    return "<unknown>"; 

    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); 
    HMODULE hMod; 
    DWORD cbNeeded; 

    if (::EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) 
    ::GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR)); 

    return std::string(szProcessName); 
} 

std::string getProcessNameByID(DWORD processID) 
{ 
    HANDLE  hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID); 
    std::string result = getProcessNameByHandle(hProcess); 
    ::CloseHandle(hProcess); 

    return result; 
} 
+0

미안하지만 난 completly 새로운 해요 ~ C++. 언제나 자바와 이클립스 (가져온/Shift + O를 누른 것을 가져와야 할 때 필요함)를 사용했다. 컴파일러가 거의 모든 것이 아직 선언되지 않았기 때문에 나는 약간의 문제가있다. 너도 나 한테 이걸 도와 줘? – shym

+0

아, 표준 라이브러리 헤더 ... 상단에'#include '와'#include '을 추가하면, 먼저'getProcessNameByHandle' 함수를 넣어야합니다. –

+0

이미 받았습니다. 여전히 다음과 같은 오류가 발생합니다. 'MEMORYSTATUSEX'이 (가)이 범위에서 선언되지 않았습니다. – shym

관련 문제