AutoHotkey純命令獲取Chrome等瀏覽器的當前網址


網上大部分都是模擬手工操作(激活地址欄並復制)的方式獲取,從論壇里找到了純命令的方式,並已轉成AutoHotkey v2版本。

是通過瀏覽器的class類來獲取的,相信用AutoHotkey的人對此不陌生

來源:https://www.autohotkey.com/boards/viewtopic.php?f=6&t=3702

hyf_getUrlFromBrowser(cls:="Chrome_WidgetWin_1")
{
    reg := "i)^(Chrome_WidgetWin_1|ApplicationFrameWindow|Chrome_WidgetWin_0|Maxthon3Cls_MainFrm|MozillaWindowClass|Slimjet_WidgetWin_1)$"
    if (cls ~= reg)
        return hyf_getUrlByACC(cls)
    else
        return hyf_getUrlByDDE(cls)
    { ;通過Surfingkeys獲取網址,通過剪切板傳輸
        clipboard := ""
        send("{alt down}c{alt up}")
        ClipWait(1)
        u := clipboard
    }
    return u
}

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=3702
hyf_getUrlByACC(cls:="Chrome_WidgetWin_1")
{
    accAddressBar := GetAddressBar(Acc_ObjectFromWindow(WinGetID("ahk_class " . cls), 0))
    Try
        sURL := accAddressBar.accValue(0)
    If !strlen(sURL) ;Chrome可能用不到
    {
        arrWin := WinGetList("ahk_class " . cls) ; In case of a nested browser window as in the old CoolNovo (TO DO: check if still needed)
        If (arrWin.length() > 1)
        {
            accAddressBar := GetAddressBar(Acc_ObjectFromWindow(arrWin[2], 0))
            Try
                sURL := accAddressBar.accValue(0)
        }
    }
    If ((sURL != "") && (substr(sURL,1,4) != "http")) ; Modern browsers omit "http://"
        sURL := "http://" . sURL
    Return sURL
    GetAddressBar(accObj)
    {
        if !IsObject(accObj)
            return
        If (accObj.accRole(0) = 42)
        {
            if (accObj.accValue(0).isUrl() || ("http://" . accObj.accValue(0)).isUrl())
                Return accObj
        }
        else
        {
            Try
            {
                For _, accChild in Acc_Children(accObj)
                {
                    accAddressBar := func(A_ThisFunc).call(accChild)
                    If IsObject(accAddressBar)
                        Return accAddressBar
                }
            }
        }
    }
}

hyf_getUrlByDDE(cls) {
    sServer := WinGetProcessName("ahk_class " . cls)
    sSearch := substr(sSearch, 1, strlen(sSearch)-4)
    iCodePage := 0x04B0 ; 0x04B0 = CP_WINUNICODE, 0x03EC = CP_WINANSI
    dllcall("DdeInitialize", "uptrp",idInst, "uint",0, "uint",0, "uint",0)
    hServer := dllcall("DdeCreateStringHandle", "uptr",idInst, "str",sServer, "int",iCodePage)
    hTopic := dllcall("DdeCreateStringHandle", "uptr",idInst, "str","WWW_GetWindowInfo", "int",iCodePage)
    hItem := dllcall("DdeCreateStringHandle", "uptr",idInst, "str","0xFFFFFFFF", "int",iCodePage)
    hConv := dllcall("DdeConnect", "uptr",idInst, "uptr",hServer, "uptr",hTopic, "uint",0)
    hData := dllcall("DdeClientTransaction", "uint",0, "uint",0, "uptr",hConv, "uptr",hItem, "uint",1, "uint",0x20B0, "uint",10000, "UPtrP",nResult) ; 0x20B0 = XTYP_REQUEST, 10000 = 10s timeout
    sData := dllcall("DdeAccessData", "uint",hData, "uint",0, "str")
    dllcall("DdeFreeStringHandle", "uptr",idInst, "uptr",hServer)
    dllcall("DdeFreeStringHandle", "uptr",idInst, "uptr",hTopic)
    dllcall("DdeFreeStringHandle", "uptr",idInst, "uptr",hItem)
    dllcall("DdeUnaccessData", "uptr",hData)
    dllcall("DdeFreeDataHandle", "uptr",hData)
    dllcall("DdeDisconnect", "uptr",hConv)
    dllcall("DdeUninitialize", "uptr",idInst)
    csvWindowInfo := StrGet(&sData, "CP0")
    return StrSplit(csvWindowInfo, '"')[2]
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM