代码很简单,需要注意的是:最顶层的窗口,需要具备没有父窗口,我这里根据需要加上了判断WS_VISIBLE属性。
HWND hGetProcessWnd(DWORD dwProcessId)
{
HWND hRetWnd = NULL;
DWORD dwEnumProcessID;
HWND hChildWnd = GetTopWindow(NULL);
while(hChildWnd)
{
::GetWindowThreadProcessId(hChildWnd, &dwEnumProcessID);
if(dwProcessId == dwEnumProcessID)
{
LONG lStyle = ::GetWindowLong(hChildWnd, GWL_STYLE);
if((lStyle & WS_VISIBLE) && (GetParent(hChildWnd)==NULL))
{
hRetWnd = hChildWnd;
break;
}
}
hChildWnd = GetWindow(hChildWnd, GW_HWNDNEXT);
}
return hRetWnd;
}