基本的に、プロセス ID を HWND に変換したいと考えています。私はこのコードを使用しています:
DWORD dwWindowId;
CHAR pszClassName[200];
HWND hWnd;
hWnd = GetTopWindow (NULL);
while ( hWnd != NULL )
{
if ( GetClassName (hWnd, pszClassName, 200) > 0)
if ( lstrcmpiA (lpcszWindowClass, pszClassName) == 0)
if ( GetWindowThreadProcessId (hWnd, &dwWindowId) )
if ( dwWindowId == dwProcessId )
return hWnd;
hWnd = GetNextWindow ( hWnd, GW_HWNDNEXT );
}
return NULL;
によって作成されたプロセスを試すまで、これはうまくいきましたCreateProcess
。この場合、どうすればよいですか?から ID やスレッド ID などのプロセス情報CreateProcess
を取得しましたが、その hwnd を取得する方法はまだわかりません。私はこれを読みました:
を呼び出した後 、lpProcessInformation 引数が指す構造体を
CreateProcess()
調べます。開始したばかりのプロセスへのハンドルとスレッド ID が含まれています。この情報を使用して 関数を呼び出し、 lpgui が指す構造体を調べます。にはいくつかの HWND があります。hwndActive から開始し、メイン ウィンドウが見つかるまでorを呼び出します。PROCESS_INFORMATION
PROCESS_INFORMATION
GetGUIThreadInfo()
GUITHREADINFO
GUITHREADINFO
GetParent()
GetAncestor()
作者: bug_crusher
EnumChildWindows()
とを試しEnumWindows()
ましたが、うまくいきませんでした。
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DWORD PID =0;
GetWindowThreadProcessId(hwnd,&PID);
if(PID == 1)
{
//,,,,,,,,
}
return TRUE;
}
よく分からないのですが、誰か説明してくれませんか?