2009-07-29 21 views
4

私はVC++コンソールアプリケーションを持っており、別のプロセスが実行されているかどうかを確認する必要があります。私はウィンドウのタイトルを持っていない、私が持っているのは実行可能な名前です。どのようにプロセスハンドル/ PIDを取得するのですか?この.exeで実行されているプロセスを列挙できますか?別のプロセスがウィンドウで実行されているかどうかを確認するにはどうすればよいですか?

+0

この質問はVB用ですが、API呼び出しはC++でも同様に適用されるはずです:http://stackoverflow.com/questions/1143301/how-to-enumerate-processes-from-vb-6-on-win- 2003 – bdonlan

答えて

2

EnumProcessesを使用すると、システム上のプロセスを列挙できます。

OpenProcessを使用してプロセスハンドルを取得し、次にQueryFullProcessImageNameを実行してプロセスを実行可能にする必要があります。

4

CreateToolhelp32Snapshot機能Process32FirstProcess32Next続く

hSnapShot = FCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

を使用してください。

PROCESSENTRY32構造体は、szExeFileメンバーとともに次のようになります。

PROCESSENTRY32W processInfo; 
processInfo.szExeFile 

あなたはすべてのセッションとユーザー間のすべてのプロセスを取得しますそのように、最初の列挙の前に特権SeDebugPrivilegeを取得することを確認します。

あなたはすべてのセッションを得るように、権限を取得する:

acquirePrivilegeByName(SE_DEBUG_NAME);// SeDebugPrivilege 

acquirePrivilegeByNameは次のように定義されて:あなたは完全なプロセスのイメージ名が必要な場合は

BOOL acquirePrivilegeByName(
          const TCHAR  *szPrivilegeName) 
{ 
    HANDLE   htoken; 
    TOKEN_PRIVILEGES tkp; 
    DWORD   dwerr; 

    //---------------- adjust process token privileges to grant privilege 
    if (szPrivilegeName == NULL) 
    { 
     SetLastError(ERROR_INVALID_PARAMETER); 
     return FALSE; 
    } 

    if (!LookupPrivilegeValue(NULL, szPrivilegeName, &(tkp.Privileges[0].Luid))) 
     return FALSE; 

    tkp.PrivilegeCount = 1; 
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken)) 
     return FALSE; 

    if (!AdjustTokenPrivileges(htoken, FALSE, &tkp, 0, NULL, NULL) || 
     GetLastError() != ERROR_SUCCESS) // may equal ERROR_NOT_ALL_ASSIGNED 
    { 
     dwerr = GetLastError(); 
     CloseHandle(htoken); 
     SetLastError(dwerr); 
     return FALSE; 
    } 

    CloseHandle(htoken); 
    SetLastError(ERROR_SUCCESS); 

    return TRUE; 
} //acquirePrivilegeByName() 

あなたがQueryFullProcessImageNameを使用することができますが、しかしszExeFileメンバーはあなたのニーズに十分かもしれません。

+0

パーフェクト。ソースコードもあります。ありがとう! –

関連する問題