; как новый ключ модификатора - PullRequest
1 голос
/ 12 апреля 2020

Я хочу, чтобы ; был новым ключом-модификатором. Следующее работает почти идеально.

`;::
if GetKeyState("LShift", "P")
    Send `:
else
    Send `;
return

`; & x::
if GetKeyState("LShift", "P")
    ...
else
    ...
return

Не работает только пункт 2. из следующего списка пожеланий. Кто-нибудь знает, как исправить этот код?

  1. ;, чтобы быть ; при нажатии в одиночку
  2. shift ;, чтобы быть : при нажатии только
  3. ; с x вторым ...
  4. shift с ; с x первым ...

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

Следующее работает отлично, но уродливый код из-за дублирования кода. Возможно, более чистый код возможен.

started := 0
LShift & `;::
if started = 0
    started := A_TickCount
return
`;::
if started = 0
    started := A_TickCount
return

LShift & `; Up::
if A_TickCount - started < 500
    Send `:
started = 0
return

`; Up::
if A_TickCount - started < 500
    Send `;
started = 0
return

`; & x::
started = 0 ; <==== !
if GetKeyState("LShift", "P")
    ...
else
    ...
return

Клавиша ; теперь работает как клавиша-модификатор, когда она используется в комбинации с x (без задержки) или если она нажата более чем на полсекунды. Задержка не является необходимой и может быть устранена; это просто предотвращает неправильное толкование случайного нажатия клавиши-модификатора как ;. Двоеточие : тоже работает правильно.

1 голос
/ 13 апреля 2020
#MaxThreadsPerHotkey 2 ; allow 2 "instances" of the hotkey subroutine to exist simultaneously

`;::
If (A_PriorKey = "`;") ; ; was pressed alone
    Send `;
return

LShift & `;:: Send :

`; & x::
if GetKeyState("LShift", "P") ;  ; & LShift & x
    Send a
else                          ; ; & x
   Send b
return
1 голос
/ 12 апреля 2020

По моему мнению, есть два возможных способа заставить точку 2 работать.

Метод 1: сохраняет левое смещение стандартное поведение клавиши

смещение + ; приводит к нажатию клавиши двоеточия : . Вы можете заставить пункт 2 работать, добавив тильду «~» перед `; и удалив

else 
    send `;

С помощью ~ вы можете сохранить поведение клавиши по умолчанию. Новый скрипт будет выглядеть примерно так:

~`;::
    if GetKeyState("LShift", "P") 
        Send `:
return 

`; & x::
    if GetKeyState("LShift", "P")
        ...
    else
        ...
return

С помощью этого метода скрипт сможет отправлять : с shift +; .

Метод 2: удаление стандартное поведение клавиши * Shift влево

Добавьте следующий фрагмент в свой код

LShift::
    Send, {} 
return 

Этот фрагмент заставит пункт 2 работать, но сделает клавишу Left Shift практически бесполезной для всего остального.

EDIT

Метод 3 : ; ожидание x

Добавление KeyWait в скрипт заставит его подождать некоторое время перед выполнением кода. Во-вторых, использование Lshift + ; в качестве отдельной комбинации горячих клавиш приведет к выводу :, устраняя необходимость использования ~ взамен.

`;::
KeyWait, `;, T0.2
    Send `;
return

LShift & `;::
    Send `:
return 

`; & x::
KeyWait, `;, T0.2 
if GetKeyState("LShift", "P")
    ...
else
    ...
return 
...