网上大部分都是模拟手工操作(激活地址栏并复制)的方式获取,从论坛里找到了纯命令的方式,并已转成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] }
AutoHotkey纯命令获取Chrome等浏览器的当前网址
原文:https://www.cnblogs.com/hyaray/p/11212846.html