用Hidy的方法是最简单的,就是用GetWindowText得到标题栏,然后比较前面部分是不是Microsoft Internet Explorer,一般来说不会出问题,如果想搞的完善些,那就结合EnumWindows、EnumProcesses、OpenProcess、EnumProcessModules、GetModuleFileNameEx
谢谢几位。 Hidy的意思是标题栏最后的字串为Microsoft Internet Explorer,不知道旧版本的IE是不是也如此。 vcmfc的意思是窗口的类名是IEFrame,看来也应该不错。 sxbyl说的搞的完善些,那就结合EnumWindows、EnumProcesses、OpenProcess、EnumProcessModules、GetModuleFileNameEx,我不知道是不是为了取得窗口的对应exe,如果是,GetWindowModuleFileName不知道可不可以。我决定同时满足3位提到的条件,才认为是IE窗口。有无更好的建议?
如果你是要判断是否Microsoft Internet Explorer程序(而不是它的浏览窗口)的话,使用判断窗口类名是否为IEFrame是最好、最快的方法。再使用其它的东西也没有什么意思。除非有人故意捣蛋,把他的窗口类也注册为IEFrame。不过我没见过,也没听说过。 如果你是要判断是否为浏览窗口,则应该比较窗口类是否为Internet Explore_Server。这时候,这个窗口可能是任意程序通过COM创建的,不一定是IE本身的。
谢谢各位,问题解决。 代码如下: HWND GetFirstZOrderIEWindow() { HWND hwndTop = NULL, hwnd = NULL; CHAR szTemp[256] = {'\0'}, szTemp2[256] = {'\0'}, *p = NULL; BOOL bFound = FALSE; hwndTop = ::GetForegroundWindow(); hwnd = hwndTop; do { if (::IsWindowVisible(hwnd) && !::IsIconic(hwnd)) { // Is an IE window? ::GetWindowText(hwnd, szTemp, 256); p = strrchr(szTemp, '-'); if (p == NULL || stricmp(p, "- Microsoft Internet Explorer") != 0) continue; ::GetClassName(hwnd, szTemp2, 256); if (strcmp(szTemp2, "IEFrame") != 0) continue; // Found one, bring it to front, then exit this loop if (hwnd != hwndTop) ::BringWindowToTop(hwnd); bFound = TRUE; break; } } while (hwnd = ::GetNextWindow(hwnd, GW_HWNDNEXT)); if (!bFound) hwnd = hwndTop; return hwnd; }
Hidy的意思是标题栏最后的字串为Microsoft Internet Explorer,不知道旧版本的IE是不是也如此。
vcmfc的意思是窗口的类名是IEFrame,看来也应该不错。
sxbyl说的搞的完善些,那就结合EnumWindows、EnumProcesses、OpenProcess、EnumProcessModules、GetModuleFileNameEx,我不知道是不是为了取得窗口的对应exe,如果是,GetWindowModuleFileName不知道可不可以。我决定同时满足3位提到的条件,才认为是IE窗口。有无更好的建议?
如果你是要判断是否Microsoft Internet Explorer程序(而不是它的浏览窗口)的话,使用判断窗口类名是否为IEFrame是最好、最快的方法。再使用其它的东西也没有什么意思。除非有人故意捣蛋,把他的窗口类也注册为IEFrame。不过我没见过,也没听说过。 如果你是要判断是否为浏览窗口,则应该比较窗口类是否为Internet Explore_Server。这时候,这个窗口可能是任意程序通过COM创建的,不一定是IE本身的。
代码如下:
HWND GetFirstZOrderIEWindow()
{
HWND hwndTop = NULL, hwnd = NULL;
CHAR szTemp[256] = {'\0'}, szTemp2[256] = {'\0'}, *p = NULL;
BOOL bFound = FALSE;
hwndTop = ::GetForegroundWindow();
hwnd = hwndTop;
do
{
if (::IsWindowVisible(hwnd) && !::IsIconic(hwnd))
{
// Is an IE window?
::GetWindowText(hwnd, szTemp, 256);
p = strrchr(szTemp, '-');
if (p == NULL || stricmp(p, "- Microsoft Internet Explorer") != 0)
continue;
::GetClassName(hwnd, szTemp2, 256);
if (strcmp(szTemp2, "IEFrame") != 0)
continue;
// Found one, bring it to front, then exit this loop
if (hwnd != hwndTop)
::BringWindowToTop(hwnd);
bFound = TRUE;
break;
}
} while (hwnd = ::GetNextWindow(hwnd, GW_HWNDNEXT)); if (!bFound)
hwnd = hwndTop;
return hwnd;
}