การใช้ปุ่มตัวปรับแต่ง 3 ปุ่มขึ้นไปใน AutoHotkey เพื่อทำซ้ำทริกเกอร์พื้นที่ TouchCursor


1

ฉันกำลังพยายามทำซ้ำปุ่มTouchCursorโดยใช้ AutoHotkey แต่ฉันไม่สามารถใช้กับตัวดัดแปลงหลายตัวได้

นี่คือสิ่งที่ฉันมีจนถึงตอนนี้ (จากhttps://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' แต่มันไม่สนใจcontrolและshiftปุ่ม

ตัวอย่างเช่นผมได้รับการคาดหวังว่าจะเน้นตัวอักษรโดยใช้space+ shift+ hเพื่อเน้นด้านซ้ายคล้ายกับspace+ +shiftleft 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

คำตอบ:


2

คุณจะต้องใช้คำสั่ง 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ก่อนจากนั้นตัวดัดแปลงแต่ละตัวมิฉะนั้นจะออกจากเร็วเกินไปและเรียกใช้ตัวดัดแปลงอย่างใดอย่างหนึ่งเท่านั้น


ขอบคุณนี่คือสิ่งที่ฉันต้องการ ฉันจะโพสต์สคริปต์ที่สมบูรณ์ให้กับคำถาม
ไม้ซุง

นอกจากนี้คุณยังสามารถใช้#If directivesเพื่อสร้างคีย์ลัดแบบคำนึงถึงบริบท (ตัวแปรฮ็อตคีย์ที่มี #If เกณฑ์มีความสำคัญกว่าเสมอ)
user3419297
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.