Можно ведь через роль искать адресную строку.
Ниже скрипт копирует содержимое адресной строки в буфер, работает с 4мя браузерами(можно и свой добавить если нету. В первой строчке через | прописаны классы окон браузеров).
Для копирования нажать левый виндовс.
browsers_class := "YandexBrowser_WidgetWin_1|Chrome_WidgetWin_1|IEFrame|MozillaWindowClass"
SetWinDelay -1
lwin::
hwnd := WinAcTive("A")
WinGetClass Ou_class,% "ahk_id " hwnd
if !(Ou_class ~= "^" browsers_class "$")
return
url := FindObjByRole( Acc_ObjectFromWindow(hwnd) ,42,1)[1].AccValue(0)
Clipboard := url
tooltip % "Скопировано: " url
return
FindObjByRole(AccObj, role,new=0) {
Static listobj_find := []
% (new) and (listobj_find := [])
try if (AccObj.accRole(0) = role) and (AccObj.AccValue(0) != "")
listobj_find.Insert(AccObj)
for k, v in Acc_Children(AccObj)
try if IsObject(obj := FindObjByRole(v, role)) and (obj.AccValue(0) != "")
listobj_find.Insert(obj)
return listobj_find
}
;Нужные функции Из Acc для работы скрипта.
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) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&p=509530#509530
try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}
Acc_Error(p="") {
static setting:=0
return p=""?setting:setting:=p
}
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"
}
if Acc_Error()
throw Exception(ErrorLevel,-1)
}
Нужные функции Acc для работы скрипта уже вшиты.