Почему Visual Studio ловит ключевые события перед автогорячей клавишей?

Я недавно переключился на раскладку клавиатуры 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 сегодня вечером.

78
задан Rody Oldenhuis 8 November 2016 в 13:39
поделиться

2 ответа

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

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

  • Запуск как vs, так и ahk от имени текущего пользователя
  • Компиляция сценария и запуск как vs, так и скомпилированного приложения от имени администратора
166
ответ дан 24 November 2019 в 10:27
поделиться

Эта фраза в мелком шрифте звучит уместно:

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

0
ответ дан 3 July 2019 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: