You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:46:04