我知道一个比较复杂的办法是使用COM的ShellWindows Object和IWebBrowser2接口,请问有无较为简单的办法?
请高手指点。谢谢。

解决方案 »

  1.   

    标题栏有:Microsoft Internet Explorer 行吗?
      

  2.   

    用Hidy的方法是最简单的,就是用GetWindowText得到标题栏,然后比较前面部分是不是Microsoft Internet Explorer,一般来说不会出问题,如果想搞的完善些,那就结合EnumWindows、EnumProcesses、OpenProcess、EnumProcessModules、GetModuleFileNameEx
      

  3.   

    谢谢几位。
    Hidy的意思是标题栏最后的字串为Microsoft Internet Explorer,不知道旧版本的IE是不是也如此。
    vcmfc的意思是窗口的类名是IEFrame,看来也应该不错。
    sxbyl说的搞的完善些,那就结合EnumWindows、EnumProcesses、OpenProcess、EnumProcessModules、GetModuleFileNameEx,我不知道是不是为了取得窗口的对应exe,如果是,GetWindowModuleFileName不知道可不可以。我决定同时满足3位提到的条件,才认为是IE窗口。有无更好的建议?
      

  4.   


        如果你是要判断是否Microsoft Internet Explorer程序(而不是它的浏览窗口)的话,使用判断窗口类名是否为IEFrame是最好、最快的方法。再使用其它的东西也没有什么意思。除非有人故意捣蛋,把他的窗口类也注册为IEFrame。不过我没见过,也没听说过。    如果你是要判断是否为浏览窗口,则应该比较窗口类是否为Internet Explore_Server。这时候,这个窗口可能是任意程序通过COM创建的,不一定是IE本身的。
      

  5.   

    谢谢各位,问题解决。
    代码如下:
    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;
    }