私は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. プロセスがすでにpowershell上で実行されているかどうかを確認するにはどうすればよいですか?
- 3. プロセスが実行されているかどうかを確認するpowershellスクリプト
- 4. プロセスが実行されているかどうかを確認する
- 5. プロセスがC++コードから実行されているかどうかを確認するにはどうすればよいですか?
- 6. ウィンドウがオフスクリーンであるかどうかを確認するにはどうすればよいですか?
- 7. Firefoxが現在実行中にヘッドレスモードで実行されているかどうかを確認するにはどうすればよいですか?
- 8. アプリがバックグラウンドで実行されているか、アンドロイドを殺しているかどうかを確認するにはどうすればよいですか?
- 9. ハイブ、ImpalaのようなclouderaサービスがJavaコードで実行されているかどうかを確認するにはどうすればよいですか?
- 10. 別のアプリケーションのウィンドウが表示されているかどうかを確認するにはどうすればよいですか?
- 11. Androidで実行されているアプリを確認するにはどうすればよいですか?
- 12. ポップアップページが開いているかどうかを確認するにはどうすればよいですか?
- 13. アプリが実際に実行されているかどうかを確認するにはどうすればよいですか?
- 14. Androidで実行時にユーザーの権限が許可されているかどうかを確認するにはどうすればよいですか?
- 15. アプリがエミュレータまたは物理デバイスで実行されているかどうかを確認するにはどうすればよいですか?
- 16. Grand Central Dispatchを使用して、ブロックが既に実行されているかどうかを確認するにはどうすればよいですか?
- 17. 実行ファイルのパスを使用してWindowsサービスがインストールされているかどうかを確認するにはどうすればよいですか?
- 18. カスタマイズがAcumaticaポータルサイトと標準のAcumatica ERPサイトで実行されているかどうかを確認するにはどうすればよいですか?
- 19. Linuxでプロセスが実行されているPHPスクリプトを知るにはどうすればよいですか?
- 20. スクリーンセーバーが実行されているかどうかを確認するには?
- 21. フルスクリーンアプリケーションが実行されているかどうかを確認するには?
- 22. CreateProcessで開始したプロセスがまだ実行されているかどうかを確認するには?
- 23. 現在のプロセスの実行が親プロセスかどうかを確認するにはどうすればよいですか?
- 24. エラーが返されたかどうかを確認するにはどうすればよいですか?
- 25. リンクが訪問されたかどうかを確認するにはどうすればよいですか?
- 26. 別のバッチファイルから別のプロセスでバッチファイルを実行するにはどうすればよいですか?
- 27. ネットパイプサービスがリッスンしているかどうかを確認するにはどうすればよいですか
- 28. ユーザーセッションごとに実行中のプロセスを確認するにはどうすればよいですか?
- 29. Sqliteで行が0か1かどうかを確認するにはどうすればいいですか
- 30. サービスコントロールマネージャーによってプロセスが実行されているかどうかを確認する方法
この質問はVB用ですが、API呼び出しはC++でも同様に適用されるはずです:http://stackoverflow.com/questions/1143301/how-to-enumerate-processes-from-vb-6-on-win- 2003 – bdonlan