Тема: AHK: Перехват (Home) в IE
словить клик на (Home) в IE.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
словить клик на (Home) в IE.
Этот скрипт будет запущен на компьютере каких-то посторонних людей?
нет. для собственных нужд.
#If WinActive("ahk_exe iexplore.exe")&&(GetTextUnderMouse() = "Домой")
LButton:: SendInput ^{vk53}
#If
GetTextUnderMouse() {
Acc := Acc_ObjectFromPoint(child)
try value := Acc.accValue(child)
if Not value
try value := Acc.accName(child)
return value
}
Для работы нужна библиотека Acc Library.
Так мало ли где может быть такая надпись. Перед этим я бы сначала проверил что под курсором мыши находится окно IE и соответствующий контрол.
#If IsHomeKey()
LButton:: ToolTip ^{vk53}
#If
IsHomeKey() {
if !WinActive("ahk_class IEFrame ahk_exe iexplore.exe")
return 0
MouseGetPos, , , WinId, ControlNN
if !InStr( ControlNN, "ToolbarWindow")
return 0
WinGet, Process, ProcessName, ahk_id %WinId%
if Process != iexplore.exe
return 0
Acc := Acc_ObjectFromPoint(child)
try value := Acc.accValue(child)
if Not value
try value := Acc.accName(child)
if (value= "Домой")
return 1
return 0
}
спасибо. но скрипт незапускается. выдает ошибку. что нетак.?
Error: Call to nonexistent function.
Specifically: Acc_ObjectFromPoint(child)
Line*
005 {
006 if !WinActive("ahk_class IEFrame ahk_exe iexplore
007 Return.O
008 MouseGetPos,„WinId,ControlNN
009 WinGet,Process,ProcessName,ahk_id %WinId%
010 if (Process != "iexplore.exe" && ControINN !=
"ToolbarWindow324")
011: Return.O
—> 012: Acc := Acc_ObjectFromPoint(child)
013: Try
013: value := Acc.accValue(child)
014: if Not value
015: Try
015: value := Acc.accName(child)
016: if (value= "Домой")
017: Return,!
The program will exit.
библиотеку Acc Library. скопировал в папку AutoHotKey.
Это >>>Download Acc Library<<< бережно кладёте сюда C:\Program Files\AutoHotkey\Lib
Общие библиотеки хранятся в папке Autohotkey\Lib\
010 if (Process != "iexplore.exe" && ControINN !=
"ToolbarWindow324")
И перекопируйте мой код.
serzh82saratov, конечно, более строгая проверка не помешает в идеале, но на мой скромный взгляд, нужно очень постараться, чтобы строка
WinActive("ahk_exe iexplore.exe")&&(GetTextUnderMouse() = "Домой")
вызвала ложное срабатывание.
А зачем у тебя 3ий if, если в 1ом имеется ahk_exe iexplore.exe ?
...
if !WinActive("ahk_class IEFrame ahk_exe iexplore.exe")
return 0
MouseGetPos, , , WinId, ControlNN
if !InStr( ControlNN, "ToolbarWindow")
return 0
WinGet, Process, ProcessName, ahk_id %WinId%
if Process != iexplore.exe
return 0
...
вызвала ложное срабатывание.
Если кликнуть на слово Домой в адресной строке или где то на странице то скрипт сработает. accName может вернуть любое слово на странице. Более того так можно кликнуть и мимо активного окна IE.
А зачем у тебя 3ий if, если в 1ом имеется ahk_exe iexplore.exe
В 1 проверка активности окна, а в 3 что мышь именно над окном.
Error at line 13.
Line Text: "ToolbarWindow324")
Error: This line does not contain a recognized action.
The program will exit.
а вы на чем проверяете работоспособность скрипта?
Вы какой код запускаете? Этот работает:
#If IsHomeKey()
LButton:: ToolTip ^{vk53}
#If
IsHomeKey() {
if !WinActive("ahk_class IEFrame ahk_exe iexplore.exe")
return 0
MouseGetPos, , , WinId, ControlNN
if !InStr( ControlNN, "ToolbarWindow")
return 0
WinGet, Process, ProcessName, ahk_id %WinId%
if Process != iexplore.exe
return 0
Acc := Acc_ObjectFromPoint(child)
try value := Acc.accValue(child)
if Not value
try value := Acc.accName(child)
if (value= "Домой")
return 1
return 0
}
нет.(
Ошибка?
скрипт запускается но неработает
не тот не другой.
Проверьте параметры, у меня 11.
ahk_class IEFrame
ahk_exe iexplore.exe
ToolbarWindow
Irbis
Кстати в таких случаях лучше не проверять окно на активность, ведь по кнопке можно кликнуть и в неактивном окне.
#If IsHomeKey()
LButton:: ToolTip ^{vk53}
#If
IsHomeKey() {
MouseGetPos, , , WinId, ControlNN
if !InStr( ControlNN, "ToolbarWindow")
return 0
WinGet, Process, ProcessName, ahk_id %WinId%
if Process != iexplore.exe
return 0
Acc := Acc_ObjectFromPoint(child)
try value := Acc.accValue(child)
if Not value
try value := Acc.accName(child)
if (value= "Домой")
return 1
return 0
}
-------------------------
Хотел добавить, для мобильности библиотеку можно не юзать без особого ущерба для лаконичности:
#If IsHomeKey()
LButton:: ToolTip ^{vk53}
#If
IsHomeKey() {
MouseGetPos, , , WinId, ControlNN
if !InStr( ControlNN, "ToolbarWindow")
return 0
WinGet, Process, ProcessName, ahk_id %WinId%
if Process != iexplore.exe
return 0
return GetTextUnderMouse() = "Домой" ? 1 : 0
}
GetTextUnderMouse() {
Static h
If !h
h := DllCall("LoadLibrary","Str","oleacc","Ptr")
If DllCall("oleacc\AccessibleObjectFromPoint"
, "Int64", DllCall("GetCursorPos","Int64*",pt)+pt
, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
Acc:=ComObjEnwrap(9,pacc,1), child:=NumGet(varChild,8,"UInt")
try value := Acc.accValue(child)
if value =
try value := Acc.accName(child)
return value
}
никак не выходит.
Запустите AhkSpy v1.047
Мыши наведите на кнопку, это данные с IE 11
У Вас что видно?
вот
Всё также, должно работать.
по клику открываться?
При клике сейчас должен появлятся тултип:
ToolTip ^{vk53}
спасиб.
kursiv, отредактируйте свои сообщения. Грамоту (особенно заглавные буквы и знаки препинания) никто не отменял.
Запрещается отвечать в теме до исправления.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться