代码很简单,需要注意的是:最顶层的窗口,需要具备没有父窗口,我这里根据需要加上了判断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;
}

本文介绍了一段代码,用于通过进程ID获取Windows系统中最顶层且无父窗口的可见窗口句柄。在遍历过程中,检查了每个窗口的WS_VISIBLE属性和其是否有父窗口。
最低0.47元/天 解锁文章
1168

被折叠的 条评论
为什么被折叠?



