自动化已有的Internet Explorer窗口

自动化已有的Internet Explorer窗口
; 示例:自动化已有的Internet Explorer窗口.

sURL := "https://autohotkey.com/boards/"
if webBrowser := GetWebBrowser()
   webBrowser.Navigate(sURL)
return

GetWebBrowser()
{
    ; 获取到顶级 IE 窗口文档对象的原始指针.
    static msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
    SendMessage msg, 0, 0, Internet Explorer_Server1, ahk_class IEFrame
    if ErrorLevel = FAIL
        return  ; 未找到 IE.
    lResult := ErrorLevel
    DllCall("oleacc\ObjectFromLresult", "ptr", lResult
        , "ptr", GUID(IID_IHTMLDocument2,"{332C4425-26CB-11D0-B483-00C04FD90119}")
        , "ptr", 0, "ptr*", pdoc)
    
    ; 查询 WebBrowserApp 服务. 在这种特殊情况中,
    ; SID 和 IID 相同, 但不总是如此.
    static IID_IWebBrowserApp := "{0002DF05-0000-0000-C000-000000000046}"
    static SID_SWebBrowserApp := IID_IWebBrowserApp
    pweb := ComObjQuery(pdoc, SID_SWebBrowserApp, IID_IWebBrowserApp)
    
    ; 释放文档对象指针.
    ObjRelease(pdoc)
    
    ; 返回包装过的可用的 WebBrowser 对象:
    static VT_DISPATCH := 9, F_OWNVALUE := 1
    return ComObject(VT_DISPATCH, pweb, F_OWNVALUE)
}

GUID(ByRef GUID, sGUID) ; 转换字符串为二进制的 GUID 并返回其地址.
{
    VarSetCapacity(GUID, 16, 0)
    return DllCall("ole32\CLSIDFromString", "wstr", sGUID, "ptr", &GUID) >= 0 ? &GUID : ""
}

 

为TA充电
共{{data.count}}人
人已赞赏
AHKV2

[RegisterCallback]显示了所有顶层窗口的摘要

2018-1-1 16:21:03

AHKV2

WIN+C弹出或收回 CD 或 DVD 驱动器的托盘

2018-1-3 8:50:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索