我们知道,EnumWindows可以列举当前系统中的所有窗体句柄并调用用户自定义回调函数EnumWindowsProc。
问题来了:
当我得到一个窗体句柄,我如何判断这个窗体句柄对应的是不是这个程序的主窗体?
例如,当我们打开EXCEL时,系统中存在大约10个左右的句柄与之相关联。在这10个左右的HWND中,我怎么判断哪个是主窗体的句柄?我曾经考虑过使用GetParent和GetWindow来获取父窗体或OWNER,如果返回NULL,则表明当前这个句柄是主窗体的。但是在MyIE中有个例外:存在一个HWND,既不是主窗体,也没有父窗体或OWNER。请教高手,这个问题怎么解?(如果这个问题能够顺利解决,我可以另外开帖给解答者再加200分!)
问题来了:
当我得到一个窗体句柄,我如何判断这个窗体句柄对应的是不是这个程序的主窗体?
例如,当我们打开EXCEL时,系统中存在大约10个左右的句柄与之相关联。在这10个左右的HWND中,我怎么判断哪个是主窗体的句柄?我曾经考虑过使用GetParent和GetWindow来获取父窗体或OWNER,如果返回NULL,则表明当前这个句柄是主窗体的。但是在MyIE中有个例外:存在一个HWND,既不是主窗体,也没有父窗体或OWNER。请教高手,这个问题怎么解?(如果这个问题能够顺利解决,我可以另外开帖给解答者再加200分!)
怎么会?
难道是外星球来的
TCHAR szOutput[1024];
HDESK hDesk = OpenDesktop(lpszDesktop, 0, FALSE, DESKTOP_ENUMERATE);
if (hDesk == NULL)
{
wsprintf(szOutput, _T("OpenDesktop for %s Error: %d\n"), lpszDesktop, GetLastError());
OutputDebugString(szOutput);
return FALSE;
} EnumDesktopWindows(hDesk, (WNDENUMPROC)EnumWindowProc, (long)this);
}BOOL CALLBACK CSystemanalyzer::EnumWindowProc(HWND hWnd, LPARAM lParam)
{
if (!IsWindowVisible(hWnd))
return TRUE;
//加一些判断条件
return TRUE;
}
WS_EX_APPWINDOW能否唯一确定一个窗体是否为应用程序的主窗体?TO:smallcrocodile(大鳄鱼)
你可以称它为“主窗体”,但它并不是通常概念上的“主窗体”,或者说,它并不是一个应用程序的主界面。当我们运行EXCEL时,系统中存在大约10个左右相关的窗体句柄,其中有2个不具有父窗体:一个是EXCEL的主界面,另一个的GetWindowText是“DDE ……”。对于后者,如果你对它调用ShowWindow(hWnd, SW_RESTORE)的话,甚至会在任务栏上多出一个相应的项目。