自动热键绑定 (CapsLock+D+J) 至 (删除)

自动热键绑定 (CapsLock+D+J) 至 (删除)

我正在尝试让键盘超载。

CapsLock & J::Send {Left} ..是左箭头,你可以猜出其他方向。

CapsLock & H::Send ^{Left} ..向左跳转单词。

我开始添加很多额外的功能,但键已经不够​​用了,所以我想我应该引入一些额外的修饰键,比如 D 可以用作“删除修饰键”。CapsLock+D+J 将从左侧删除一个字符(类似 Backspace 键),CapsLock+D+L 将从右侧删除一个字符(类似 Delete 键)。

此外,S 是我的 Speedy 修饰键,就像 Ctrl 一样,意思是“跳转单词”。因此 CapsLock+S+D+J 会删除左边的一个单词。

如果我只能...... - 绑定到 3 个以上的键,那就可以解决它。 - 绑定到任何 keyup/down 并在 if-else 块中处理它,那就可以解决它。

感谢您提出好的想法。

答案1

像这三个修饰符CapsLock & H & D不能使用。

您可以使用获取按键状态并将其与热键和 if 或 switch 语句结合起来进行任意组合。

答案2

捕获任何键盘按下/弹起事件的技巧如下:

*d::msgbox, d down
*d up::msgbox, d up

请注意,“d down”会触发多次直到您释放它。*代表任何修饰键,如 shift/alt/ctrl/win(或无)。

为了处理任何事情,我使用 sg. 像这样:

updateState(key, dir) {..}

*a::updateState("a", "down")
*a up::updateState("a", "up")
*b::updateState("b", "down")
*b up::updateState("b", "up")
*c::updateState("c", "down")
...

我将所有需要的关键状态存储在诸如、、、key_a等变量中。key_bkey_capslock

此外,当前事件存在于变量中a_down,如a_up,,,,b_down..b_up

然后我可以使用类似 if-else 语句

if(key_capslock and key_d and key_f and j_down) {
    ; do whatever
}

不,我没有发现打字速度有任何下降。

如果没有按下 CapsLock 键,我将使用以下方法“传递”正常的键盘功能:

; DEFAULT keyboard
if(key_capslock = 0) {
    if(key_shift)
        shift := "+"
    if(key_ctrl)
        ctrl := "^"
    if(key_alt)
        alt := "!"

    if(dir="down") {
        event = {%key% down}
    }
    else {
        event = {%key% up}
    }

    SendInput, %shift%%ctrl%%alt%%event%
}

编辑:请注意,有些键无法同时检测到,因为(大多数?)键盘采用矩阵布局,包含水平和垂直线。按下某个键后,将使用 1 条水平线和 1 条垂直线,因此无法准确检测到共享任何这些线的下一个按键/释放。出于这个原因,我不能同时使用 S 和 JKL,因此我使用 F 表示 FAAST,而不是 S 表示 SPEEDY。:/

相关内容