0
午後、WINAPIプロセスハンドルをすべてのプロセスを経由することなく取得できますか? 私は、すべてのプロセスを反復することによって、その名前でプロセスハンドルをWINAPIする方法を知っている:すべてのプロセスを反復せずに、プロセス名でWINAPIプロセスハンドルを取得することは可能ですか?
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(snapshot, &entry) == TRUE){
while (Process32Next(snapshot, &entry) == TRUE)
{
if (stricmp(entry.szExeFile, ProcessName) == 0){
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
// measure process memory usage
CloseHandle(hProcess);
}
}
}
CloseHandle(snapshot);
しかし、プロセスのスナップショットを反復処理するためにかなりの時間がかかるだろうように思えます。ありがとうございました。
内部的にプロセスはリンクリストで管理されているため、最終的に誰かが繰り返し処理して名前を比較する必要があります。私は本当にあなたの心配が何であるかは分かりません。数百(最も極端な場合)の文字列の比較は、まったく時間がかかりません。 – Luke
C#では、GetProcessesByNameを呼び出すことができますか?アンマネージドC++のようなものがありますか?ご協力ありがとうございました。 –
いいえ、私の知る限りWin32 APIやフレームワーク(ATL/MFC/etc)に組み込まれているものはありません。自分で書く必要があります。あなたが与えたコード例で十分です。 GetProcessesByName()は、カバーの下にあるものと同様のものです。 – Luke