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