AutoHotkey에서 3개 이상의 수정자 키를 사용하여 TouchCursor 공간 트리거 복제

AutoHotkey에서 3개 이상의 수정자 키를 사용하여 TouchCursor 공간 트리거 복제

복습하려고 하는데터치커서AutoHotkey를 사용하고 있지만 여러 수정자와 함께 작동하도록 할 수 없습니다.

이것이 내가 지금까지 가지고 있는 것입니다(fromhttps://autohotkey.com/boards/viewtopic.php?t=6525):

space & g::Send, {esc}
space & l::send, {right}
space & k::send, {up}
space & j::send, {down}
space & h::send, {left}
space & p::send, {backspace}
space & m::send, {delete}
space & u::send, {home}
space & o::send, {end}
space::
Send, {space}
return

위 스크립트는 'h', 'j', 'k' 및 'l'을 사용하여 커서를 이동하는 데는 잘 작동하지만 controlshift키는 무시됩니다.

예를 들어, ++ 와 유사한 왼쪽을 강조 표시하기 위해 space++ shift를 사용하여 문자를 강조 표시할 것으로 예상했습니다 .hspaceshiftleft arrow

시도했는데 +space & h::send, {left}다음 오류가 발생했습니다.

여기에 이미지 설명을 입력하세요

편집하다

control이 스크립트는 및 다음 과 함께 작동합니다 shift.

; Right, Shift+Right, Control+Right, Shift+Control+Right
space & l::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{right}
    } else if(GetKeyState("Shift", "P")) {
        send, +{right}
    } else if(GetKeyState("Control", "P")) {
        send, ^{right}
    } else {
        send, {right}
    }
Return

; Up, Shift+Up, Control+Up, Shift+Control+Up
space & k::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{up}
    } else if(GetKeyState("Shift", "P")) {
        send, +{up}
    } else if(GetKeyState("Control", "P")) {
        send, ^{up}
    } else {
        send, {up}
    }
Return

; Down, Shift+Down, Control+Down, Shift+Control+Down
space & j::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{down}
    } else if(GetKeyState("Shift", "P")) {
        send, +{down}
    } else if(GetKeyState("Control", "P")) {
        send, ^{down}
    } else {
        send, {down}
    }
Return

; Left, Shift+Left, Control+Left, Shift+Control+Left
space & h::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{left}
    } else if(GetKeyState("Shift", "P")) {
        send, +{left}
    } else if(GetKeyState("Control", "P")) {
        send, ^{left}
    } else {
        send, {left}
    }
Return

; Home, Shift+Home, Control+Home, Shift+Control+Home
space & u::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{home}
    } else if(GetKeyState("Shift", "P")) {
        send, +{home}
    } else if(GetKeyState("Control", "P")) {
        send, ^{home}
    } else {
        send, {home}
    }
Return

; End, Shift+End, Control+End, Shift+Control+End
space & o::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{end}
    } else if(GetKeyState("Shift", "P")) {
        send, +{end}
    } else if(GetKeyState("Control", "P")) {
        send, ^{end}
    } else {
        send, {end}
    }
Return

; Backspace, Shift+Backspace
space & p::
    if(GetKeyState("Control", "P")) {
        send, ^{backspace}
    } else {
        send, {backspace}
    }
Return

; Simple modifiers
space & g::Send, {esc} 
space & m::send, {delete}

; Allow space bar to go through if pressed without holding
space::
Send, {space}
return

답변1

당신은if 문와 더불어GetKeyState추가 수정자를 캡처하는 함수입니다. 구체적으로 수정 P자의 (물리적 상태)를 찾습니다 shift.

예를 들어 다음과 space & h같은 조합이 있습니다.

space & h::
    if(GetKeyState("Shift", "P")) {
        send, +{left}
    } else {
        send, {left}
    }
Return

나는 아마도 당신이 한 단계 더 나아가 ctrl수정자를 구현하고 싶어할 것이라고 생각합니다. if 문을 확장하고 if 문이 실행되는 방식에 주의해야 합니다.

space & h::
    if((GetKeyState("Shift", "P") and (GetKeyState("Control", "P")))) {
        send, +^{left}
    } else if(GetKeyState("Shift", "P")) {
        send, +{left}
    } else if(GetKeyState("Control", "P")) {
        send, ^{left}
    } else {
        send, {left}
    }
Return

Shift키 상태를 먼저 확인한 Control다음 개별 수정자를 확인해야 합니다 . 그렇지 않으면 너무 일찍 종료되어 수정자 중 하나만 실행됩니다.

관련 정보