Тема: AHK: Запустить сценарий AHK по клику в окне Firefox
Как можно сделать, чтобы при клике ПКМ на определённом элементе окна Firefox запускался сценарий AHK?
Я сейчас запускаю его горячей клавишей, но хотелось бы привязать его к мышиному клику.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как можно сделать, чтобы при клике ПКМ на определённом элементе окна Firefox запускался сценарий AHK?
Я сейчас запускаю его горячей клавишей, но хотелось бы привязать его к мышиному клику.
Всё окно Firefox - один большой элемент управления (контрол). Скорее всего придётся использовать команду ImageSearch, чтобы проверить наличие изображения нужного элемента под курсором.
Жаль. С ImageSearch я не справлюсь - не тот уровень владения сабжем.
Прошу прощения за оффтоп. Написал ответ, потом понял, что глупость сморозил, хотел удалить сообщение, и не могу найти, как это сделать. Подскажите, а? ))
OFF:
Обычно на форумах такого не предусмотрено, и в таких случаях пост, как правило, заменяется на "del" или "." ![]()
Обычно на форумах такого не предусмотрено, и в таких случаях пост, как правило, заменяется на "del" или "." smile
Не согласен. Последне сообщение считаю возможным стирать в течении определенного времени (минут 10-20) и если после него уже не было ответа.
Расширение FireGestures может в помощь? Я как то тоже думал над этим. Делал так: В таймере сканирую буфер обмена, как только там появляется ссылка, то запускаю скрипт. А сцылка помещается в буфер при жесте вниз.
Расширение FireGestures может в помощь? Я как то тоже думал над этим. Делал так: В таймере сканирую буфер обмена, как только там появляется ссылка, то запускаю скрипт. А сцылка помещается в буфер при жесте вниз.
Я, к сожалению, ничего не понял... Какая ссылка?
Мне надо, чтобы скрипт запускался при клике на какой-то из иконок в панели навигации.
Может проще добавить свою иконку?
Очень интересная идея. Но мне не понятно, как сделать
...чтобы кнопка добавлялась не по хоткею, а при появлении окна?
Там даётся ответ:
Либо «ждите окно» постоянно, либо отслеживайте HSHELL_WINDOWACTIVATED.
Но мне это ни о чём не говорит... ![]()
Жалко. Задумка очень хорошая, но каждый раз создавать кнопку заново - мне не подходит.
Спрошу уж заодно здесь, чтоб не плодить темы, как в AutoHotkey создать обычный alert, в котором можно было бы выделить и скопировать часть текста? В MsgBox этого не сделаешь.
Создать окно командой Gui, вставить в него контрол Edit.
Но мне это ни о чём не говорит..
Сорри за предыдущий мой пост, был неправ, удалил.
Global WinClass := "OperaWindowClass"
IfWinExist ahk_class %WinClass%
CreateButton(WinExist("ahk_class " WinClass))
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc")
return ; Конец секции авто выполнения
ShellProc(nCode, wParam) {
If (nCode = 1)
{
WinGetClass, Class, % "ahk_id " wParam
If Class = %WinClass%
CreateButton(wParam)
}
}
CreateButton(Hwnd) {
Gui, BN: Margin, 0,0
Gui, BN: Color, D3DAED
Gui, BN: +Hwndhgui -Caption +E0x08000000
Gui, BN: Add, Picture, Icon138 gBN1 x5 w32 h-1, Shell32.dll
Gui, BN: Add, Picture, Icon160 gBN2 yp x+10 wp h-1, Shell32.dll
Gui, BN: Add, Picture, Icon133 gBN3 yp x+10 wp h-1, Shell32.dll
DllCall("SetParent", "uint", hgui, "uint", Hwnd)
Gui, BN: Show, NA x1 y1
return
BN1:
ToolTip % A_ThisLabel
return
BN2:
ToolTip % A_ThisLabel
Return
BN3:
ToolTip % A_ThisLabel
return
}
Код действителен для одного целевого окна указанного класса.
WinClass подставьте свой. Можете добавить код в свой повседневный скрипт (у меня так).
Здесь в функци ShellProc отслеживается не активацию, а факт создания (nCode = 1) окна. Если окон несколько, то самый простой способ это написать nCode = 4. Тогда будет отслеживание активации окна, и переброс созданных кнопок. Иначе, создавать массив и индексировать Gui при создании.
Координаты кнопки укажите в строке: Gui, BN: Show, NA x1 y1
serzh82saratov
Спасибо за скрипт!
Только он у меня, к сожалению, очень нестабильно работает. Я установил nCode = 4
При открытии нового окна Firefox кнопка на него переходит, при закрытии возвращается в первое окно. Но после нескольких срабатываний кнопка имеет обыкновение сворачиваться на панель задач и если её оттуда развернуть, иконки кнопки видны по 2 и даже по 3 штуки
Приведите ваш код.
Приведите ваш код.
Вот
Global WinClass := "MozillaWindowClass"
IfWinExist ahk_class %WinClass%
CreateButton(WinExist("ahk_class " WinClass))
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc")
return ; Конец секции авто выполнения
ShellProc(nCode, wParam) {
If (nCode = 4)
{
WinGetClass, Class, % "ahk_id " wParam
If Class = %WinClass%
CreateButton(wParam)
}
}
CreateButton(Hwnd) {
Gui, BN: Margin, 0,0
Gui, BN: Color, D3DAED
Gui, BN: +Hwndhgui -Caption +E0x08000000
Gui, BN: Add, Picture, Icon138 gBN1 x5 w16 h-1, Shell32.dll
Gui, BN: Add, Picture, Icon160 gBN2 yp x+10 wp h-1, Shell32.dll
Gui, BN: Add, Picture, Icon133 gBN3 yp x+10 wp h-1, Shell32.dll
DllCall("SetParent", "uint", hgui, "uint", Hwnd)
Gui, BN: Show, NA x500 y5
return
BN1:
ToolTip % A_ThisLabel
return
BN2:
ToolTip % A_ThisLabel
Return
BN3:
ToolTip % A_ThisLabel
return
}Upd
Хочу уточнить: под "новыми окнами" я имел в виду вспомогательные окна Firefox - консоль ошибок, Scratchpad и пр.
WinClass у них тот же, что и у основного окна.
Не знаю, имеет ли это значение.
кнопка имеет обыкновение сворачиваться на панель задач и если её оттуда развернуть, иконки кнопки видны по 2 и даже по 3 штуки
Можете описать более подробно.
Можете описать более подробно.
После нескольких удачных переходов из окна в другое окно, кнопка исчезает с положенного места и появляется на панели задач как свёрнутое приложение
Если кликнуть по этому значку, в левом нижнем углу над кнопкой "Пуск" появляется шапка окна 
Если ещё раз кликнуть, кнопка появляется на своём законном месте, на панели меню браузера, но имеет такой вид:
Я подправил свой предыдущий пост, уточнил, о каких окнах речь.
Попробуйте так:
Global WinClass := "OperaWindowClass"
IfWinExist ahk_class %WinClass%
CreateButton(WinExist("ahk_class " WinClass))
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc")
return ; Конец секции авто выполнения
ShellProc(nCode, wParam) {
If (nCode = 4)
{
WinGetClass, Class, % "ahk_id " wParam
If Class = %WinClass%
CreateButton(wParam)
}
}
CreateButton(Hwnd) {
IfWinNotExist ahk_id %hgui%
{
Gui, BN: Margin, 0,0
Gui, BN: Color, D3DAED
Gui, BN: +Hwndhgui +ToolWindow -Caption +E0x08000000
Gui, BN: Add, Picture, Icon138 gBN1 x5 w16 h-1, Shell32.dll
Gui, BN: Add, Picture, Icon160 gBN2 yp x+10 wp h-1, Shell32.dll
Gui, BN: Add, Picture, Icon133 gBN3 yp x+10 wp h-1, Shell32.dll
}
DllCall("SetParent", "uint", hgui, "uint", Hwnd)
Gui, BN: Show, NA x500 y5
return
BN1:
ToolTip % A_ThisLabel
return
BN2:
ToolTip % A_ThisLabel
Return
BN3:
ToolTip % A_ThisLabel
return
}
Если в дочерних окнах кнопки ненужны, то здесь:
ShellProc(nCode, wParam) {
If (nCode = 4)
{
WinGetClass, Class, ahk_id %wParam%
WinGet, Style, Style, ahk_id %wParam%
If !(Style & 0x40000000) && (Class = WinClass)
CreateButton(wParam)
}
}
ещё проверяйте что окно родительское.
Попробуйте так:
А вот это работает как часы!
Спасибо большое!
Zohann пишет:Расширение FireGestures может в помощь? Я как то тоже думал над этим. Делал так: В таймере сканирую буфер обмена, как только там появляется ссылка, то запускаю скрипт. А сцылка помещается в буфер при жесте вниз.
Я, к сожалению, ничего не понял... Какая ссылка?
Мне надо, чтобы скрипт запускался при клике на какой-то из иконок в панели навигации.
Я думал вам надо запускать скрипт при клике на странице браузера.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться