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的封装有关,希望对需要的朋友有帮助。

  • 相关阅读:
    linux分区-df
    day34 协程
    day33 GIL锁 线程队列 线程池
    day32 线程
    day31 管道 进程池 数据共享
    day30 锁 队列
    day29 进程
    day28 socketserver
    day27 粘包及粘包的解决方案
    day26 网络通讯的整个流程
  • 原文地址:https://www.cnblogs.com/qq78292959/p/3046756.html
Copyright © 2011-2022 走看看