zoukankan      html  css  js  c++  java
  • python通过hwnd获得IWebBrowser2(原创)

    项目中用到了查找已打开的ie窗口,通过的解决方法是用ShellWindows,测试了一下该方法获得的ie窗口不全。

    后来想到了通过hwnd来获取,在C++、Delphi等工具中都没有问题,但python总是失败,看了官方的邮件列表也没有解决方案。

    后来从官方的demo中找到灵感,在这里讲该函数分享下:

    SID_STopLevelBrowser = IID('{4C96BE40-915C-11CF-99D3-00AA004AE837}')
    SID_SWebBrowserApp = IID('{0002DF05-0000-0000-C000-000000000046}')
    IID_IWebBrowser2 = IID('{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}')
    
    def getIWebBrowser2ByHwnd(hwnd):
        '''
        通过句柄获取IWebBrowser2对象
        '''
        try:
            msg = win32gui.RegisterWindowMessage('WM_HTML_GETOBJECT')
            ret, result = win32gui.SendMessageTimeout(hwnd, msg, 0, 0, win32con.SMTO_ABORTIFHUNG, 1000)
            ob = pythoncom.ObjectFromLresult(result, pythoncom.IID_IDispatch, 0)
            iHtmlDocument2 = Dispatch(ob)
            iServiceProvider = iHtmlDocument2.parentWindow._oleobj_.QueryInterface(pythoncom.IID_IServiceProvider)
            iWebBrowser2 = Dispatch(iServiceProvider.QueryService(SID_SWebBrowserApp, pythoncom.IID_IDispatch))
            return iWebBrowser2
        except:
            traceback.print_exc()
            return None


    如果按c++里的方式:

    Dispatch(iServiceProvider.QueryService(SID_SWebBrowserApp, IID_IWebBrowser2))

    会报如下错误:

    TypeError: There is no interface object registered that supports this IID


    估计与pythoncom的封装有关,希望对需要的朋友有帮助。

  • 相关阅读:
    django 在保存数据前进行数据校验
    itertools
    python 发送请求
    python 异常处理
    python 对redis 键值对的操作
    python 对redis key的基本操作
    python 操作redis数据
    一只青蛙一次可以跳1阶或者2阶,n阶,有多少种到达终点的方式。
    Django 自定义扩展命令
    关于函数可变参数
  • 原文地址:https://www.cnblogs.com/qq78292959/p/3046756.html
Copyright © 2011-2022 走看看