我正在尝试让键盘超载。
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_b
key_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。:/