Окна в перехватывают и блокируют sendinput из ahk
Окна в Windows 10 перехватывают sendinput (особенно Visual Studio) и переопределяют следующий скрипт:
F1 ::
If (A_TimeSincePriorHotkey < 100) ;hyperclick
Return
sendinput {LButton down}
KeyWait, LButton
sendinput {LButton up}
Return
В результате в редакторе кода не работает F1 как щелчок мыши при нажатии, есть у кого-нибудь какие-нибудь идеи, как всё-таки забиндить макрос на эту клавишу и чтобы окна не реагировали на событие нажатия этой кнопки, если в скрипте ahk она уже описана?
Что-нибудь вроде метода PreventDefault?
Ответы (2 шт):
В общем в той же студии можно автоматически отключить назначенные клавиши на быстрый доступ к справке (не уверен, что это можно сделать где-то ещё), но частично это решило проблему.
Просто жмём Remove напротив Shortcut for selected command.
Рекомендую переходить на AHKv2, он намного надежнее и быстрее, многие ошибки скриптов первой версии во второй полностью отсутствуют.
По сути вопроса: Во-первых, когда вы создаете горячую клавишу в AHK, ее исходный ввод блокируется и не может быть получен никакой программой (чтобы этого избежать нужно явно указать это в скрипте с помощью символа "~" перед горячей клавишей).
Во-вторых, ваш скрипт переусложнен настолько, на сколько только вообще возможно переусложнить такую простую задачу, как клик мышки. Какой смысл делать это через SendMessage, если есть простой Click? И зачем вообще может потребоваться отправлять клик в окно? Чтобы сделать его активным? Для этого есть WinActivate. Нужен клик по конкретному контролу? Используйте библиотеку UIAutomation и кликайте по любым контролам.
Пример хука клавиши F1, который полностью повторяет действия левой кнопки мышки (можно открывать приложения, кликать, перетаскивать, выделять и т.п.):
F1::
{
Click(,,,, "Down")
KeyWait("F1")
Click(,,,, "Up")
}
