一共有4段代码:
Acc获取Chrome浏览器网址.ahk
; http://www.bubuko.com/infodetail-3128033.html ; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=3702 ; AutoHotkey Version: AutoHotkey 1.1 ; Language: English ; Platform: Win7 SP1 / Win8.1 / Win10 ; Author: Antonio Bueno <user atnbueno of Google's popular e-mail service> ; Short description: Gets the URL of the current (active) browser tab for most modern browsers ; Last Mod: 2016-05-19 Menu, Tray, Icon, % A_WinDir "\system32\netshell.dll", 86 ; Shows a world icon in the system tray ModernBrowsers := "ApplicationFrameWindow,Chrome_WidgetWin_0,Chrome_WidgetWin_1,Maxthon3Cls_MainFrm,MozillaWindowClass,Slimjet_WidgetWin_1" LegacyBrowsers := "IEFrame,OperaWindowClass" F1:: nTime := A_TickCount sURL := GetActiveBrowserURL() WinGetClass, sClass, A If (sURL != "") MsgBox, % "The URL is """ sURL """`nEllapsed time: " (A_TickCount - nTime) " ms (" sClass ")" Else If sClass In % ModernBrowsers "," LegacyBrowsers MsgBox, % "The URL couldn't be determined (" sClass ")" Else MsgBox, % "Not a browser or browser not supported (" sClass ")" Return GetActiveBrowserURL() { global ModernBrowsers, LegacyBrowsers WinGetClass, sClass, A If sClass In % ModernBrowsers Return GetBrowserURL_ACC(sClass) Else If sClass In % LegacyBrowsers Return GetBrowserURL_DDE(sClass) ; empty string if DDE not supported (or not a browser) Else Return "" } ; "GetBrowserURL_DDE" adapted from DDE code by Sean, (AHK_L version by maraskan_user) ; Found at http://autohotkey.com/board/topic/17633-/?p=434518 GetBrowserURL_DDE(sClass) { WinGet, sServer, ProcessName, % "ahk_class " sClass StringTrimRight, sServer, sServer, 4 iCodePage := A_IsUnicode ? 0x04B0 : 0x03EC ; 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") StringSplit, sWindowInfo, csvWindowInfo, `" ;"; comment to avoid a syntax highlighting issue in autohotkey.com/boards Return sWindowInfo2 } GetBrowserURL_ACC(sClass) { global nWindow, accAddressBar If (nWindow != WinExist("ahk_class " sClass)) ; reuses accAddressBar if it's the same window { nWindow := WinExist("ahk_class " sClass) accAddressBar := GetAddressBar(Acc_ObjectFromWindow(nWindow)) } Try sURL := accAddressBar.accValue(0) If (sURL == "") { WinGet, nWindows, List, % "ahk_class " sClass ; In case of a nested browser window as in the old CoolNovo (TO DO: check if still needed) If (nWindows > 1) { accAddressBar := GetAddressBar(Acc_ObjectFromWindow(nWindows2)) Try sURL := accAddressBar.accValue(0) } } If ((sURL != "") and (SubStr(sURL, 1, 4) != "http")) ; Modern browsers omit "http://" sURL := "http://" sURL If (sURL == "") nWindow := -1 ; Don't remember the window if there is no URL Return sURL } ; "GetAddressBar" based in code by uname ; Found at http://autohotkey.com/board/topic/103178-/?p=637687 GetAddressBar(accObj) { Try If ((accObj.accRole(0) == 42) and IsURL(accObj.accValue(0))) Return accObj Try If ((accObj.accRole(0) == 42) and IsURL("http://" accObj.accValue(0))) ; Modern browsers omit "http://" Return accObj For nChild, accChild in Acc_Children(accObj) If IsObject(accAddressBar := GetAddressBar(accChild)) Return accAddressBar } IsURL(sURL) { Return RegExMatch(sURL, "^(?<Protocol>https?|ftp)://(?<Domain>(?:[\w-]+\.)+\w\w+)(?::(?<Port>\d+))?/?(?<Path>(?:[^:/?# ]*/?)+)(?:\?(?<Query>[^#]+)?)?(?:\#(?<Hash>.+)?)?$") } ; The code below is part of the Acc.ahk Standard Library by Sean (updated by jethrow) ; Found at http://autohotkey.com/board/topic/77303-/?p=491516 Acc_Init() { static h If Not h h:=DllCall("LoadLibrary","Str","oleacc","Ptr") } Acc_ObjectFromWindow(hWnd, idObject = 0) { Acc_Init() If DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject&=0xFFFFFFFF, "Ptr", -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc)=0 Return ComObjEnwrap(9,pacc,1) } Acc_Query(Acc) { Try Return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1) } Acc_Children(Acc) { If ComObjType(Acc,"Name") != "IAccessible" ErrorLevel := "Invalid IAccessible Object" Else { Acc_Init(), cChildren:=Acc.accChildCount, Children:=[] If DllCall("oleacc\AccessibleChildren", "Ptr",ComObjValue(Acc), "Int",0, "Int",cChildren, "Ptr",VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*",cChildren)=0 { Loop %cChildren% i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i), Children.Insert(NumGet(varChildren,i-8)=9?Acc_Query(child):child), NumGet(varChildren,i-8)=9?ObjRelease(child): Return Children.MaxIndex()?Children: } Else ErrorLevel := "AccessibleChildren DllCall Failed" } }
获取当前网页的代码_带判断.ahk
SetBatchLines, -1 js = ( javascript: (() => { if (window.location.protocol === 'https:') { document.documentElement.focus(); const timer = setInterval(() => { if (document.hasFocus()) { clearInterval(timer); navigator.clipboard.writeText(document.documentElement.outerHTML); } }, 10); } else { const textArea = document.createElement('textarea'); textArea.value = document.documentElement.outerHTML; textArea.wrap = 'off'; textArea.rows = 100000; textArea.style.position = 'fixed'; document.documentElement.appendChild(textArea); textArea.focus(); textArea.select(); document.execCommand('copy'); textArea.parentNode.removeChild(textArea); } })(); ) Return $F1:: Clipboard := "" RunJsFromChromeAddressBar(js) ClipWait, 2 MsgBox, % ErrorLevel ? "未能获得价值" : Clipboard Return RunJsFromChromeAddressBar(js, exe := "chrome.exe") { static WM_GETOBJECT := 0x3D , ROLE_SYSTEM_TEXT := 0x2A , STATE_SYSTEM_FOCUSABLE := 0x100000 , SELFLAG_TAKEFOCUS := 0x1 , AccAddrBar if !AccAddrBar { window := "ahk_class Chrome_WidgetWin_1 ahk_exe " . exe SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, % window AccChrome := AccObjectFromWindow( WinExist(window) ) AccAddrBar := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE}) } AccAddrBar.accValue(0) := "javascript:" . js AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0) ControlSend,, {Enter}, % window, Chrome Legacy Window } SearchElement(parentElement, params) { found := true for k, v in params { try { if (k = "ChildCount") (parentElement.accChildCount != v && found := false) else if (k = "State") (!(parentElement.accState(0) & v) && found := false) else (parentElement["acc" . k](0) != v && found := false) } catch found := false } until !found if found Return parentElement for k, v in AccChildren(parentElement) if obj := SearchElement(v, params) Return obj } AccObjectFromWindow(hWnd, idObject = 0) { static IID_IDispatch := "{00020400-0000-0000-C000-000000000046}" , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}" , OBJID_NATIVEOM := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1 , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr") VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID) if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0 Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE) } AccChildren(Acc) { static VT_DISPATCH := 9 Loop 1 { if ComObjType(Acc, "Name") != "IAccessible" { error := "Invalid IAccessible Object" break } try cChildren := Acc.accChildCount catch Return "" Children := [] VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0) res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0 , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren) if (res != 0) { error := "AccessibleChildren DllCall Failed" break } Loop % cChildren { i := (A_Index - 1)*(A_PtrSize*2 + 8) child := NumGet(varChildren, i + 8) Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child ) ( b && ObjRelease(child) ) } } if error ErrorLevel := error else Return Children.MaxIndex() ? Children : "" } AccQuery(Acc) { static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1 try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE) }
获取当前网页的代码.ahk
SetBatchLines, -1 js = ( var textArea = document.createElement("textarea"); textArea.value = new XMLSerializer().serializeToString(document); textArea.style.position = 'fixed'; document.body.appendChild(textArea); textArea.focus(); textArea.select(); document.execCommand('copy'); textArea.parentNode.removeChild(textArea) ) $F1:: Clipboard := "" RunJsFromChromeAddressBar(js) ClipWait, 3 MsgBox, % Clipboard Return RunJsFromChromeAddressBar(js, exe := "chrome.exe") { static WM_GETOBJECT := 0x3D , ROLE_SYSTEM_TEXT := 0x2A , STATE_SYSTEM_FOCUSABLE := 0x100000 , SELFLAG_TAKEFOCUS := 0x1 window := "ahk_class Chrome_WidgetWin_1 ahk_exe " . exe WinActivate, % window SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, % window AccChrome := AccObjectFromWindow( WinExist(window) ) AccAddrBar := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE}) AccAddrBar.accValue(0) := "javascript:" . js AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0) ControlSend,, {Enter}, % window } SearchElement(parentElement, params) { found := true for k, v in params { try { if (k = "ChildCount") (parentElement.accChildCount != v && found := false) else if (k = "State") (!(parentElement.accState(0) & v) && found := false) else (parentElement["acc" . k](0) != v && found := false) } catch found := false } until !found if found Return parentElement for k, v in AccChildren(parentElement) if obj := SearchElement(v, params) Return obj } AccObjectFromWindow(hWnd, idObject = 0) { static IID_IDispatch := "{00020400-0000-0000-C000-000000000046}" , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}" , OBJID_NATIVEOM := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1 , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr") VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID) if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0 Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE) } AccChildren(Acc) { static VT_DISPATCH := 9 Loop 1 { if ComObjType(Acc, "Name") != "IAccessible" { error := "Invalid IAccessible Object" break } try cChildren := Acc.accChildCount catch Return "" Children := [] VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0) res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0 , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren) if (res != 0) { error := "AccessibleChildren DllCall Failed" break } Loop % cChildren { i := (A_Index - 1)*(A_PtrSize*2 + 8) child := NumGet(varChildren, i + 8) Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child ) ( b && ObjRelease(child) ) } } if error ErrorLevel := error else Return Children.MaxIndex() ? Children : "" } AccQuery(Acc) { static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1 try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE) }
RunJsFromChromeAddressBar.ahk
/* F1:: li = ( tripadvisor.com instagram.com walmart.com craigslist.org ebay.com healthline.com etsy.com ) loop, parse, li, `n { RunJsFromChromeAddressBar(A_LoopField) sleep, 2000 } return */ RunJsFromChromeAddressBar(js, exe := "chrome.exe") { static WM_GETOBJECT := 0x3D , ROLE_SYSTEM_TEXT := 0x2A , STATE_SYSTEM_FOCUSABLE := 0x100000 , SELFLAG_TAKEFOCUS := 0x1 if !AccAddrBar { window := "ahk_class Chrome_WidgetWin_1 ahk_exe " . exe SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, % window AccChrome := AccObjectFromWindow( WinExist(window) ) AccAddrBar := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE}) } AccAddrBar.accValue(0) := "javascript:" . js AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0) ControlSend,, {Enter}, % window, Chrome Legacy Window } SearchElement(parentElement, params) { found := true for k, v in params { try { if (k = "ChildCount") (parentElement.accChildCount != v && found := false) else if (k = "State") (!(parentElement.accState(0) & v) && found := false) else (parentElement["acc" . k](0) != v && found := false) } catch found := false } until !found if found Return parentElement for k, v in AccChildren(parentElement) if obj := SearchElement(v, params) Return obj } AccObjectFromWindow(hWnd, idObject = 0) { static IID_IDispatch := "{00020400-0000-0000-C000-000000000046}" , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}" , OBJID_NATIVEOM := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1 , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr") VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID) if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0 Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE) } AccChildren(Acc) { static VT_DISPATCH := 9 Loop 1 { if ComObjType(Acc, "Name") != "IAccessible" { error := "Invalid IAccessible Object" break } try cChildren := Acc.accChildCount catch Return "" Children := [] VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0) res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0 , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren) if (res != 0) { error := "AccessibleChildren DllCall Failed" break } Loop % cChildren { i := (A_Index - 1)*(A_PtrSize*2 + 8) child := NumGet(varChildren, i + 8) Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child ) ( b && ObjRelease(child) ) } } if error ErrorLevel := error else Return Children.MaxIndex() ? Children : "" } AccQuery(Acc) { static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1 try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE) }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)