Как переназначить ключ в одном случае, а не переназначить в другом случае с помощью autohotkey?

Я хочу переназначить alt+e, когда в Autocad включены заглавные буквы.

И когда capslock не включен, alt+e должен открыть меню редактирования.

Я использую такой скрипт

<!e::
if(GetKeyState( "CAPSLOCK", "T" ))
{
    SendInput erase{space}wp{space}
}
else
{
    Send !e
}

Когда я включаю capslock, ключ переназначения в порядке.

Когда я отключаю capslock и alt+e, открывается меню редактирования, но тут же закрывается.

Спасибо.


person coordinate    schedule 02.07.2012    source источник
comment
Я хочу опубликовать вопрос в сообществе autohotkey. Но это всегда выдает мне ошибку: вы дали неверный ответ на вопрос.   -  person coordinate    schedule 02.07.2012


Ответы (2)


Вам понадобится $ в начале вашей горячей клавиши, чтобы предотвратить бесконечный цикл, который вызовет !e в вашем блоке else. Вы также можете добавить Return в конце горячей клавиши, чтобы скрипт не продолжился в том, что находится под этой горячей клавишей.

$!e::
if GetKeyState( "CapsLock", "T" )
    Sendinput, erase{space}wp{space}
else
    Sendinput, !e
Return

(Квадратные скобки требуются только в том случае, если блоки if/else состоят из более чем одной строки.)

Кроме того, вероятная проблема заключается в том, что это горячая клавиша Alt, которая также настроена на отправку alt.
Я говорю, что это проблема, потому что если вы нажимаете и удерживаете alt, он активирует меню,
а затем скрипт отправляет alt, который будет конфликтовать с этим.
Как сказал Рикардо, идеальный способ написать это с помощью команды #IF (входит только в AHK_L).

#If GetKeyState("CapsLock", "T") and WinActive("AutoCAD")

!e:: SendInput, erase{space}wp{space}

#If

Обратите внимание, что вы можете добавить функцию WinActive() в выражение команды #If. Попробуйте сначала без этого, а также поймите, что название приложения всегда должно быть точно AutoCAD, чтобы оно работало. Я бы порекомендовал найти ahk_class AutoCad с оконным шпионом AHK вместо использования названия.

Если это по-прежнему не работает, вероятно, AHK отправляет быстрее, чем AutoCAD хотел бы получать.
Информацию о том, как с этим справиться, можно найти здесь.

person Honest Abe    schedule 06.07.2012
comment
Спасибо Честное слово. Теперь я использую shift+e вместо alt+e. Пробую ваш скрипт и autohotkey_L. Когда заглавные буквы включены, alt+e не открывает меню редактирования, а вводит строку {ctrl}e в автокаде. - person coordinate; 06.07.2012

Попробуйте изменить блок else на это:

Send, {ALTDOWN}e{ALTUP}

Я не полагаюсь на эти символы для отправки нажатий клавиш в AutoHotKey.

person r_crispa    schedule 02.07.2012
comment
Когда я запускаю #If GetKeyState( CAPSLOCK, T ) ‹!e:: Send, erase{SPACE}wp{SPACE} return. Это ошибка: неверная горячая клавиша - person coordinate; 03.07.2012
comment
Я не мог разорвать строки в моем последнем комментарии. Небольшой код содержит четыре строки, первая#If GetKeyState ( "CAPSLOCK", "T" ), вторая<!e::, третьяSend, erase{SPACE}wp{SPACE} и четвертый и последний - return. - person r_crispa; 03.07.2012
comment
Спасибо. Но я получил ошибку: LineText: #If....Эта строка не содержит распознанного действия. И я изменил #If на If, эта ошибка исчезла. Но другая ошибка появляется для стирания строки.... - person coordinate; 04.07.2012
comment
Спасибо. Я обновился до Autohotkey_l. Код вверх может быть загружен. Но сочетание клавиш ctrl+e не может переключаться заглавными буквами. И #IfWinActive AutoCAD не работал в autohotkey_l. - person coordinate; 05.07.2012
comment
Извините, я только что проверил горячую клавишу Alt + e в окне блокнота, я не могу вам помочь в приложении AutoCAD. Предоставленный код работал здесь без сбоев. - person r_crispa; 05.07.2012
comment
Спасибо Рикардо. Я использую shift+e вместо alt+e. Теперь он работает нормально. - person coordinate; 06.07.2012