Почему визуальная студия захватывает ключевые события перед autohotkey?
Недавно я переключился на раскладку клавиатуры Dvorak как часть эксперимента. Одна из самых сложных частей перехода связана с горячими клавишами. Большинство горячих клавиш разработаны с учетом QWERTY, и, что еще хуже, горячие клавиши, по-видимому, связаны исключительно с мышцами.
Вместо того, чтобы переучивать все горячие клавиши, я написал autohotkey script, чтобы перевести макет Dvorak обратно в QWERTY, когда клавиши Ctrl, Alt или Win нажаты в сочетании с другими ключи. Он прекрасно работает везде, где я пытался, кроме Visual Studio '08. Кажется, нажатия клавиш пойманы, прежде чем autohotkey сможет их перевести.
Почему это происходит и как я могу это исправить?
Ниже приведен фрагмент (с самого начала) моего script:
; control + letter
^;::^z
^q::^x
^j::^c
^k::^v
Обновление: script отлично работает на Win7 с новыми установками ahk, vs08 и coderush. У машины, с которой у меня возникают проблемы, есть перспектива. Любые мысли о том, как дальше диагностировать?
Обновление 2: script отлично работает с бета-версией Vista и 2010 года. Кажется, что-то с vs 08 + vista. Попробуем новую установку vs08 сегодня вечером.
Ответы
Ответ 1
Ага! Я понял это. Если ahk и целевое приложение не работают под теми же привилегиями (или пользователем), ahk не будет правильно перехватывать/имитировать события клавиатуры. В моем случае визуальная студия была запущена с правами администратора (повышенными), тогда как ahk script был запущен в качестве текущего пользователя.
Либо одно из следующего разрешило проблему:
- Запуск обоих vs и ahk в качестве текущего пользователя
- Компиляция script и запуск обоих vs и скомпилированного приложения в качестве администратора
Ответ 2
Просто хочу добавить пару точек к решению, найденному самим OP.
1) Проблема заключается не в том, что AHK и VS работают с разными разрешениями - это просто, что горячие клавиши, созданные script, запущенные в режиме без администратора, не будут работать на приложениях, запущенных в режиме администратора, но не проблема, если это наоборот.
2) Нет необходимости компилировать script обязательно, просто установите autohotkey.exe для запуска в режиме администратора (что я делаю), или, альтернативно, создайте ярлык для конкретного script и установите его в всегда запускается в режиме администратора.
(Кстати, просто для того, чтобы указать, нет производительности, запустив скомпилированную версию AHK script, потому что код по-прежнему интерпретируется - это то, что теперь интерпретатор встроен в созданный исполняемый файл)
Ответ 3
Эта фраза в маленькая печать звучит актуально:
Если SendMode используется в секции автоматического выполнения (верхняя часть script), это влияет на все повторные сопоставления. Однако, поскольку переназначение использует Send {Blind}, и поскольку режим SendPlay не полностью поддерживает {Blind}, некоторые переназначения могут работать неправильно в режиме SendPlay (, особенно Control, Shift, Alt и Win). Чтобы обойти это, избегайте SendPlay в разделе автозапуска при перенаправлении; затем используйте команду SendPlay против Send в других местах на протяжении script. Кроме того, вы можете перевести свои перепечатки в горячие клавиши (как описано ниже), которые явно вызывают SendEvent vs. Send.