新手求教,如何实现单击和长按绑定不同按键? Topic is solved

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

k88

新手求教,如何实现单击和长按绑定不同按键?

Post by k88 » 17 Nov 2019, 22:49

我想把caps键变成这样:
按住的时候是Ctrl,单击的时候还是caps
请问应怎么写?谢谢。
fwejifjjwk2
Posts: 89
Joined: 10 Aug 2019, 01:49

Re: 新手求教,如何实现单击和长按绑定不同按键?

Post by fwejifjjwk2 » 19 Nov 2019, 23:18

editing
Last edited by fwejifjjwk2 on 05 Apr 2021, 20:23, edited 1 time in total.
k88

Re: 新手求教,如何实现单击和长按绑定不同按键?

Post by k88 » 22 Nov 2019, 04:03

fwejifjjwk2 wrote:
19 Nov 2019, 23:18
我的預設鍵盤配置 capslock 就已經是 ctrl 了,下面的代碼對我有效,剩下的你自己改吧。 :beard:

Laszlo post in 2007

Code: Select all

SetNumLockState, on
SetScrollLockState, AlwaysOff
; refrence https://autohotkey.com/board/topic/15574-morse-find-hotkey-press-and-hold-patterns/
; ; 單擊 LControl 視為 caps 其它情況視為 ctrl

~LControl::
    p := Morse()
    If (p = "0"){ ; 單擊切換 CapsLock 狀態
        SetCapsLockState % !GetKeyState("CapsLock", "T")
    }
    Else If (p = "00"){
        MsgBox Two short presses
    }
    Else If (p = "01"){ ; 長按視為 LControl
        Send, {LControl}
    }
    Else{
        Send, {LControl}
        ; MsgBox Press pattern %p%
    }
Return

Morse(timeout = 250) {
    tout := timeout/1000
    key := RegExReplace(A_ThisHotKey,"[\*\~\$\#\+\!\^]")
    Loop {
        t := A_TickCount
        KeyWait %key%
        Pattern .= A_TickCount-t > timeout
        KeyWait %key%,DT%tout%
        If (ErrorLevel)
            Return Pattern
    }
}
谢谢你,但感觉反应不是很灵敏,打字快的时候会出错。如果可以实现“提起LCtrl时检测按的过程中是否有其它键按下过,如果没有的话则切换大小写”可能会更好。
fwejifjjwk2
Posts: 89
Joined: 10 Aug 2019, 01:49

Re: 新手求教,如何实现单击和长按绑定不同按键?

Post by fwejifjjwk2 » 22 Nov 2019, 10:51

editing
Last edited by fwejifjjwk2 on 05 Apr 2021, 20:23, edited 2 times in total.
k88

Re: 新手求教,如何实现单击和长按绑定不同按键?

Post by k88 » 23 Nov 2019, 09:28

fwejifjjwk2 wrote:
22 Nov 2019, 10:51
@k88
1. 不要做沒辦法提高效率的事情。快捷鍵有針對視窗觸發、在視窗的特定位置觸發、多鍵盤模式就夠了,應該把精力放在其它地方。
2. 用 shift 輸入大寫就夠了,大小轉換,AutoHotkey 有函數,notepad++ 也可以做到。
3. 盡量用 launch bar 少用快捷鍵
谢谢你的建议
Post Reply

Return to “请求帮助”