Почему визуальная студия улавливать ключевые события до аутохотки-AutoHotkey?


Я недавно переключился на раскладку клавиатуры Dvorak в качестве эксперимента. Одна из самых сложных частей перехода была связана с горячими клавишами. Большинство горячих клавиш разработаны с учетом QWERTY, и, что еще хуже, горячие клавиши, похоже, чрезвычайно связаны с мышечной памятью.

вместо того, чтобы переучивать все горячие клавиши, я написал сценарий autohotkey для перевода макета Dvorak обратно в QWERTY, когда Ctrl, Alt, или Win клавиши нажимаются вместе с другими клавишами. Он прекрасно работает везде, где я пробовал, кроме Visual Studio ' 08. Кажется, нажатия клавиш перехватываются до того, как autohotkey сможет их перевести.

почему это происходит и как это исправить?

Ниже приведен отрывок (с самого начала) моего скрипта:

; control + letter
^;::^z
^q::^x
^j::^c
^k::^v

обновление: скрипт отлично работает на Win7 с недавно установленными ahk, vs08 и coderush. Машину я проблема с запуском vista. Любые мысли о том, как дальше диагностировать?

обновление 2: скрипт отлично работает с Vista и 2010 beta 2. Кажется, что-то с просто vs 08 + vista. Хочу попробовать новую установку vs08 сегодня.

4 69

4 ответа:

Аха! Я уже все понял. Если ahk и целевое приложение не работают с одинаковыми привилегиями (или пользователем), ahk не будет правильно перехватывать/имитировать события клавиатуры. В моем случае visual studio была запущена с правами администратора (повышенными), в то время как сценарий ahk был запущен как текущий вошедший в систему пользователь.

любое из следующих решений проблемы:

  • работает как средство против и как нынешний пользователь!--6-->
  • компиляция скрипта и запуск как vs, так и скомпилированное приложение в качестве администратора

просто хочу добавить пару пунктов к решению, найденному самим ОП.

1) проблема не с AHK и VS работает с разные разрешения-это просто горячие клавиши, созданные скриптом, работающим в non-admin режим не будет работать на приложения, работающие в admin режим, но не было бы никаких проблем, если это наоборот.

2) нет необходимости компилировать скрипт обязательно, просто установите программа AutoHotkey.exe для запуска в режиме администратора (это то, что я делаю), или альтернативно создать ярлык для конкретного скрипта и установить его всегда работать в режиме администратора. (кстати, просто чтобы указать, нет никакого прироста производительности при запуске скомпилированной версии сценария AHK, потому что код все еще интерпретируется - его просто теперь интерпретатор встроен в созданный исполняемый файл)

эта фраза в мелкий принт звучит актуально:

если SendMode используется в разделе автоматического выполнения (верхняя часть скрипта), это влияет на все переназначения. Однако, поскольку переназначение использует Send {Blind} и поскольку режим SendPlay не полностью поддерживает {Blind}, некоторые переназначения могут не работать должным образом в режиме SendPlay (особенно контроль, сдвиг, Alt и Win). Чтобы обойти это, избегайте SendPlay в разделе автоматического выполнения, когда у вас есть переназначения; затем используйте команду SendPlay против Send в других местах по всему сценарию. Кроме того, вы можете перевести свои переназначения в горячие клавиши (как описано ниже), которые явно вызывают SendEvent против Send.

по-видимому, есть обходной путь для этого.

документы .htm#Installer_uiAccess.
форум thread by Lexikos

выдержка:

EnableUIAccess

Изменяет AutoHotkey.exe позволяет скриптам выполнять следующие действия даже при включенном UAC:

взаимодействие с окнами административных программ без запуска скрипта от имени администратора. Использовать SendPlay. Есть ограничения; пожалуйста, прочитайте сообщение перед использованием этого скрипта.

ссылка на скачивание файла ahk сломана на форуме, но я нашел его на Github:EnableUIAccess.транспортное средство