Autohotkey脚本实现单热键独占执行需求咨询
解决AutoHotkey多按键互斥触发鼠标单击的问题
你的需求是让f、g、h、j、k、l每个按键按下时触发一次鼠标左键单击,且同一时间只能响应一个按键的触发。之前的代码把所有按键绑定到同一段逻辑后等待所有按键释放,这种写法没法实现互斥;加Sleep也没用,因为Sleep只是延迟执行,阻止不了多个按键同时触发。
用全局变量做互斥锁就能解决这个问题,具体代码如下:
; 全局变量标记是否正在处理按键,初始为未处理状态 global isProcessing := false ; 给每个按键绑定处理函数 f::HandleKey("f") g::HandleKey("g") h::HandleKey("h") j::HandleKey("j") k::HandleKey("k") l::HandleKey("l") ; 通用按键处理函数 HandleKey(keyName) { global isProcessing ; 如果已有按键在处理,直接返回,不执行任何操作 if (isProcessing) return ; 标记为正在处理,锁定其他按键 isProcessing := true ; 发送鼠标左键单击 SendInput "{LButton}" ; 等待当前按下的按键释放 KeyWait keyName ; 释放锁定,允许其他按键触发 isProcessing := false }
代码说明
isProcessing作为互斥锁,确保同一时间只有一个按键能触发单击操作。- 每个按键触发时都会先检查锁状态,如果锁被占用(有其他按键在处理),直接跳过;如果锁可用,就执行单击并锁定,直到当前按键释放后再解锁。
- 用通用函数
HandleKey可以避免重复写相同逻辑,维护起来更方便。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

