私はVC++コンソールアプリケーションを持っており、別のプロセスが実行されているかどうかを確認する必要があります。私はウィンドウのタイトルを持っていない、私が持っているのは実行可能な名前です。どのようにプロセスハンドル/ PIDを取得するのですか?この.exeで実行されているプロセスを列挙できますか?別のプロセスがウィンドウで実行されているかどうかを確認するにはどうすればよいですか?
4
A
答えて
2
EnumProcessesを使用すると、システム上のプロセスを列挙できます。
OpenProcessを使用してプロセスハンドルを取得し、次にQueryFullProcessImageNameを実行してプロセスを実行可能にする必要があります。
4
はCreateToolhelp32Snapshot機能Process32FirstとProcess32Next続く
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
パーフェクト。ソースコードもあります。ありがとう! –
関連する問題
- 1. WindowsプロセスがC++で別のWindowsプロセスが親プロセスであるかどうかを確実に確認するにはどうすればよいですか?
- 2. プロセスがC++コードから実行されているかどうかを確認するにはどうすればよいですか?
- 3. ウィンドウがオフスクリーンであるかどうかを確認するにはどうすればよいですか?
- 4. アプリがバックグラウンドで実行されているか、アンドロイドを殺しているかどうかを確認するにはどうすればよいですか?
- 5. 別のアプリケーションのウィンドウが表示されているかどうかを確認するにはどうすればよいですか?
- 6. Androidで実行されているアプリを確認するにはどうすればよいですか?
- 7. アプリが実際に実行されているかどうかを確認するにはどうすればよいですか?
- 8. ポップアップページが開いているかどうかを確認するにはどうすればよいですか?
- 9. フルスクリーンアプリケーションが実行されているかどうかを確認するには?
- 10. スクリーンセーバーが実行されているかどうかを確認するには?
- 11. Linuxでプロセスが実行されているPHPスクリプトを知るにはどうすればよいですか?
- 12. Grand Central Dispatchを使用して、ブロックが既に実行されているかどうかを確認するにはどうすればよいですか?
- 13. 実行ファイルのパスを使用してWindowsサービスがインストールされているかどうかを確認するにはどうすればよいですか?
- 14. サービスコントロールマネージャーによってプロセスが実行されているかどうかを確認する方法
- 15. リンクが訪問されたかどうかを確認するにはどうすればよいですか?
- 16. エラーが返されたかどうかを確認するにはどうすればよいですか?
- 17. ユーザーセッションごとに実行中のプロセスを確認するにはどうすればよいですか?
- 18. Androidサービスがフォアグラウンドで実行されているかどうかを確認するにはどうすればよいですか?
- 19. PerlスクリプトがWindows上で実行されているかどうかを確認するにはどうすればよいですか?
- 20. AndroidアプリがGoogle Cloud Test Labで実行されているかどうかを確認するにはどうすればよいですか?
- 21. コンテナがKubernetesクラスタ内で実行されているかどうかを確認するにはどうすればよいですか?
- 22. ネットパイプサービスがリッスンしているかどうかを確認するにはどうすればよいですか
- 23. コードが鼻検査から実行されているかどうかを確認するにはどうすればよいですか?
- 24. スクリプトがスーパーユーザーとして実行されているかどうかを確認するにはどうすればよいですか?
- 25. PythonアプリケーションがAWSラムダ関数内で実行されているかどうかを確認するにはどうすればいいですか?
- 26. NSTimerが実行されているかどうかを確認するにはどうすればよいですか?
- 27. どのようにフルスクリーンアプリケーションがウィンドウで実行されているかどうかを検出できますか?
- 28. ウィンドウにWS_VISIBLEが設定されているかどうかを確認するにはどうすればいいですか? (または見える場合)
- 29. ユーザーがindex.htmlにいるかどうかを確認するにはどうすればよいですか?
- 30. google auth2.signIn()ウィンドウがユーザーによって閉じられているかどうかを確認するにはどうすればよいですか?
この質問はVB用ですが、API呼び出しはC++でも同様に適用されるはずです:http://stackoverflow.com/questions/1143301/how-to-enumerate-processes-from-vb-6-on-win- 2003 – bdonlan