基本上,我想将进程 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。我确实读过这个:
调用后
CreateProcess()
,检查PROCESS_INFORMATION
lpProcessInformation 参数指向的结构。PROCESS_INFORMATION
包含刚刚启动的进程的句柄和线程 ID。使用此信息调用GetGUIThreadInfo()
函数,然后检查GUITHREADINFO
lpgui 指向的结构。GUITHREADINFO
有几个 HWND。从 hwndActive 开始,然后调用GetParent()
orGetAncestor()
直到找到主窗口。由 bug_crusher
我试过EnumChildWindows()
and EnumWindows()
,但它们没有用。
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DWORD PID =0;
GetWindowThreadProcessId(hwnd,&PID);
if(PID == 1)
{
//,,,,,,,,
}
return TRUE;
}
但是我不明白,谁能解释一下?