Когда блокировка заглавных букв нажата, пробел возвращает подчеркивание

По сути, я ищу следующее: когда CapsLock включен, я хочу, чтобы Space вернулся _ и я хочу, чтобы Shift + Space вернулся ,

Подробно: Это своего рода продолжение этого вопроса, который я задал о переназначении клавиш Shift + Пробел, чтобы они стали подчеркиванием (_). Я получил отличный ответ, но нашел его немного сложным, особенно когда у меня ленивый мизинец, который не любит вовремя нажимать клавишу Shift, чтобы я нажал клавишу пробела. Так что теперь я задаюсь вопросом, знает ли кто-нибудь о решении сделать так, чтобы клавиша пробела могла переназначаться, чтобы подчеркнуть, когда CapsLock включен. И, что еще лучше, если CapsLock включен, и я нажму комбинацию Shift + Space, это заставит космический символ. Имеет ли это смысл? Идите и попросите разъяснений.

О, кстати, решение вопроса, который я задал ранее, может сделать это. Это называется AutoHotKey. Если это сработает, то я полностью доволен этим! Спасибо!

2 ответа

Решение

Скрипт AutoHotkey:

+Space::
state := GetKeyState("CapsLock", "T")
if state
    SendPlay {Space}
else
    SendPlay _
return

Space::
state := GetKeyState("CapsLock", "T")
if state
    SendPlay _
else
    SendPlay {Space}
return

Что оно делает:

  • Если CapsLock не активен:

    • Пробел вставляет пробел.

    • Shift + Пробел вставки подчеркивания.

  • Если CapsLock активен:

    • Космические вставки подчеркивают.

    • Shift + Пробел вставляет пробел.

Если вы хотите, чтобы Space работал нормально, когда CapsLock не активен, просто удалите первый блок.

Как пользоваться:

  1. Загрузите и установите последнюю версию.

  2. Сохраните приведенный выше скрипт как underscore.ahk, используя ваш любимый текстовый редактор.

  3. Дважды щелкните файл, чтобы запустить скрипт.

  4. Если вы хотите, скопируйте скрипт (или ссылку на него) в Startup папка.

Как это устроено:

  • +Space:: ... return исполняет ... когда нажата Shift + пробел.

    +Space:: ... return исполняет ... когда нажимается пробел (без модификаторов).

  • state := GetKeyState("CapsLock", "T") проверяет, активен ли CapsLock.

    • Если это, state является true и блок после if state исполняется.

    • Если это не так, state является false и блок после else исполняется.

  • SendPlay X вставляет символ (последовательность) X,

    Вы не можете использовать Send здесь, так как он будет запускать сценарий рекурсивно, что приводит к бесконечному циклу.

  • return завершает скрипт в текущей точке.

    Второй return необязательно, первое - нет. Без последнего, Shift + Space приведет к выполнению обоих блоков.

$Space::
state := GetKeyState("CapsLock", "T")
if state
    Send _
else
    Send {Space}
return        

Приведенный выше ответ также не работает для меня. Это сработало однако.

Другие вопросы по тегам