#SingleInstance Force
#NoEnv
Key = Перезагрузить ; Кнопку, что нужно нажать на странице.
Wait := 5000 ; Время для таймера. 3600000 = 1 час (60*60*1000)
Return
F6:: Reload
F2:: ; Обновление вкладки по таймеру (перейти на нужную отделить от основных, нажать клавишу).
If !(SW := !SW){
SetTimer, F5, Off
I=
Tool("Обновление вкладки выключено:`n" Title)
Return
}
WinGetTitle, Title, A
ID := WinExist("A")
Tool(ID "`t" Title)
SetTimer, F5, % Wait
F5:
if B
B.accDoDefaultAction(0)
Else
B := Button(Key, Title)
; B := Button(Key, ID)
If (B = 1){
SetTimer, F5, Off
SW := !SW
Tool("Не удалось получить accessible-object.", 15000,0,0)
Return
}
If (B = 2){
SetTimer, F5, Off
SW := !SW
Tool("Ошибка! Такой клавиши нет!`n" Key, 15000,0,0)
Return
}
I++
Tool("Обновили: " I, 2500,0,0)
Return
;-----------------------------------------
;[teadrinker] 12.12.2019 http://forum.script-coding.com/viewtopic.php?id=15091
Button(key_name, wind := "A"){
ListLines, Off
;SendMessage, WM_GETOBJECT := 0x003D, 0, 1, WinExist(wind)
If !accNow := AccObjectFromWindow(WinExist(wind))
Return 1 ; Не удалось получить accessible-object.
If !AccElem := SearchElement(accNow, {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: key_name})
Return 2 ; Кнопка не найдена.
AccElem.accDoDefaultAction(0)
Return AccElem
}
;-------------------------------------------------------------------------------------------------------
SearchElement(parentElement, params){
ListLines, Off
found := true
for k, v in params {
Try (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){
ListLines, Off
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){
ListLines, Off
Static VT_DISPATCH := 9
Loop 1{
If ComObjType(Acc, "Name") != "IAccessible"{
Error := "Invalid IAccessible Object"
Break
}
cChildren := Acc.accChildCount, 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){
ListLines, Off
Static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
Try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}
;-----------------------------------------
Tool(Text, Wait := 1000, X := "", Y := ""){
SetTimer, T_Off, Off
ToolTip, % Text, %X%, %Y%
SetTimer, T_Off, % Wait
Return
}
~Esc::
T_Off:
SetTimer, T_Off, Off
ToolTip
Return
Win11x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17|
AHK-Wiki |
Переменные и выражения |
RegEx101