1 (изменено: p.polena, 2024-08-21 18:36:22)

Тема: AHK: Автоскрытие контекстного меню

Здравствуйте. При клике ПКМ в браузере (Firefox) появляется контекстное меню с классом:

ahk_class MozillaDropShadowWindowClass

Не получается сделать (придумать), чтобы оно автоматически закрывалось, когда фокус с него смещается. Подскажите, как реализовать?
Актуально и для другого софта.

2

Re: AHK: Автоскрытие контекстного меню

Первое что пришло в голову - проверка по таймеру. Замените переменную 'App' на своё окно по образцу блокнота.

App := "ahk_class #32768 ahk_exe notepad.exe"
Return

*~vk2::
KeyWait, vk2, U
SetTimer, CheckMenu, -50	; Запуск метки через небольшую задержку (для появления окошка).
Return


CheckMenu:
Off := 10	; Кол-во итераций ожидания окошка. Если страница 'тяжёлая' - увеличить значение.
While(Off){
 If WinExist(App){
  SetTimer, CheckFocus, 100
  Break
 }
 Off -= 1
}
ToolTip, % (Off ? "Ждём смены фокуса":"Не найдено"), -9999, -9999, 10
Return

CheckFocus:
MouseGetPos,,, MWin
If (MWin = WinExist(App)){
 ToolTip, В фокусе менюшки, -9999, -9999, 10
}
Else{
 ToolTip, Вне фокуса, -9999, -9999, 10
 Send, {Esc}
 SetTimer, CheckFocus, Off	; Выключить проверку.
 SetTimer, ToolTipOff, -1000	; Выключить подсказку через 1 сек.
}
Return

ToolTipOff:
ToolTip,,,, 10
Return
Win11x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101

3 (изменено: p.polena, 2024-08-22 00:45:51)

Re: AHK: Автоскрытие контекстного меню

__Михаил__, спасибо. То, что нужно. В браузере на ПКМ жесты. Иногда вместо жеста (руки кривые) выскакивает контекстное меню. Сейчас это меню скрывается без лишних действий и жест можно повторить. Окончательный вариант вашего кода для этой цели:

App := "ahk_class MozillaDropShadowWindowClass ahk_exe r3dfox.exe"
Return
*~vk2::
KeyWait, vk2, U
SetTimer, CheckMenu, -50	; Запуск метки через небольшую задержку (для появления окошка).
Return
CheckMenu:
Off := 10	; Кол-во итераций ожидания окошка. Если страница 'тяжёлая' - увеличить значение.
While(Off){
 If WinExist(App){
  SetTimer, CheckFocus, 1000
  Break
 }
 Off -= 1
}
Return
CheckFocus:
MouseGetPos,,, MWin
If (MWin = WinExist(App)){
 ToolTip, , -9999, -9999, 10
}
Else{
 ToolTip, , -9999, -9999, 10
 Send, {Esc}
 SetTimer, CheckFocus, Off	; Выключить проверку.
 SetTimer, ToolTipOff, -500	; Выключить подсказку через 0.5 сек.
}
Return
ToolTipOff:
ToolTip,,,, 10
Return
#NoTrayIcon

"Излишеств" не осталось?

4

Re: AHK: Автоскрытие контекстного меню

p.polena Если 'ToolTip' не нужны, то их удалить полностью нужно.

Win11x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101

5 (изменено: Malcev, 2024-08-22 21:52:14)

Re: AHK: Автоскрытие контекстного меню

А зачем посылать esc, если есть winclose?
И у меня с данным скриптом в фаерфоксе вложенные подменю автоматом закрываются.

6

Re: AHK: Автоскрытие контекстного меню

Malcev, полезное замечание.