Windows使用AutoHotKey解决鼠标键连击现象(解决鼠标连击、单击变双击的故障)

news/2025/1/9 15:51:02 标签: G304, 罗技, 鼠标, AutoHotKey

注:罗技鼠标,使用久了之后会出现连击现象,如果刚好过保了,可以考虑使用软件方案解决连击现象:

以下是示例AutoHotKey脚本,实现了调用XButton1用于关闭窗口(以及Win+W,XButton2也导向关闭窗口,关闭窗口使用了函数Close),其中解决罗技鼠标侧键1(XButton1)所出现的连击现象.

; 可以使用命令#CommentFlag //将注释符; 换为双斜杠
;^ Ctrl
;! Alt
;+ Shift
;# Win

/*


* 修饰符
通配符: 即使附加的修饰键被按住也能激发热键. 这常与 重映射 按键或按钮组合使用.
~ 修饰符
激发热键时,不会屏蔽(被操作系统隐藏)热键中按键原有的功能。
$ 修饰符
通常只在脚本使用 Send 命令发送包含了热键自身的按键时才需要使用此符号, 此时可以避免触发它自己.
$ 前缀强制使用 键盘钩子 来实现此热键, 作为一个副作用这样避免了 Send 命令触发它自己.
$ 前缀相当于在此热键定义之前的某个位置指定了 #UseHook。


*/



$^w::Close()
return

#w::Close()
return

XButton1::Close()
return

XButton2::Close()
return

Close()
{
    ; WinGetClass, class, A
    ; MsgBox, The active window's class is "%class%".
    ; WinGetTitle, Title, A
    ; MsgBox, The active window is "%Title%".

    ;微信
    IfWinActive, ahk_class WeChatMainWndForPC
    {
        WinMinimize
        return
    }

    ;企业微信
    IfWinActive, ahk_class WeWorkWindow
    {
        WinMinimize
        return
    }

    ;资源管理器
    IfWinActive, ahk_class CabinetWClass
    {
        WinClose
        return
    }
   
    ;.chm Help
    IfWinActive, ahk_class HH Parent
    {
        WinClose
        return
    }


    SetTitleMatchMode, RegEx
    ; Outlook 主窗口
    IfWinActive, .+Outlook$ ahk_class rctrl_renwnd32
    {
        WinMinimize
        return
    }

    
    SetTitleMatchMode, RegEx
    ; SetTitleMatchMode, slow
    ; Outlook 邮件窗口 .+邮件.*
    IfWinActive, .+(?!Outlook$).* ahk_class rctrl_renwnd32
    {
        WinClose
        return
    }

    ; SetTitleMatchMode, 1
    ; SetTitleMatchMode Fast
    ; 防止出现鼠标连击现象    
    if (A_PriorHotkey == "XButton1" && A_ThisHotkey == "XButton1" && A_TimeSincePriorHotkey<200)
    {
        ; Send ^w    ; 防止出现鼠标连击现象,这里要空操作!
        ; MsgBox, % "AAA" . A_ThisHotkey . "bbb" . A_TimeSinceThisHotkey
    }
    else
    {
         Send ^w
    }
}

--------分割符--------

代码使用XButton1来关闭窗口,关闭窗口使用Close()函数,也即XButton1::Close()。

关键代码:

if (A_PriorHotkey == "XButton1" && A_ThisHotkey == "XButton1" && A_TimeSincePriorHotkey< 200)

关键代码解释如下:A_PriorHotkey代表上一次的按键,A_ThisHotkey代表本次的按键,A_TimeSincePriorHotkey代表2次按键的间隔时间(毫秒),代码含义:如果上一次按键和本次按键均为XButton1,且2次间隔小于200,则{}代表空操作(分号注释代码),否则,将再次发送^w关闭窗口。注意,为了防止死循环调用,$^w::Close()的$代表仅键盘真正的按键^w也即Ctrl+W可以触发Close()函数。否则,本函数只发送^w也即Ctrl+W且不再循环触发Close函数。

实际应用情况中,根据鼠标连击的间隔快慢,可以将200设置为你想要的合适的值。

也可以将代码中,最后部分的 Send ^w 改为 Send XButton1,这样,也可以使XButton1避免重复发送(屏蔽了第2次的发送)。本次案例,精减后的代码【仅针对XButton1】:

; 本代码用于阻止XButton1(侧按键1)出现的连击现象

; $ 前缀强制使用 键盘钩子 来实现此热键, 作为一个副作用这样避免了 Send 命令触发它自己
$XButton1::DoXButton1()
return

DoXButton1()
{

    ; 防止出现鼠标连击现象    
    if (A_PriorHotkey == "XButton1" && A_ThisHotkey == "XButton1" && A_TimeSincePriorHotkey<200)
    {
        
    }
    else
    {
         Send XButton1
    }
}


http://www.niftyadmin.cn/n/5817688.html

相关文章

前端金额运算精度丢失问题及解决方案

前言 前端开发中难免会遇到价格和金额计算的需求&#xff0c;这类需求所要计算的数值大多数情况下是要求精确到小数点后的多少位。但是因为JS语言本身的缺陷&#xff0c;在处理浮点数的运算时会出现一些奇怪的问题&#xff0c;导致计算不精确。 本文尝试从现象入手&#xff0…

C# 中await和async的用法(一)

在 C# 中&#xff0c;await 关键字用于异步编程&#xff0c;配合 async 方法一起使用。await 允许你等待异步操作完成&#xff0c;而不会阻塞当前线程。简而言之&#xff0c;await 会暂停当前方法的执行&#xff0c;直到任务完成&#xff0c;然后继续执行。 1. await与async的关…

Clojure语言的数据库编程

Clojure语言的数据库编程 引言 在当今社会&#xff0c;数据的处理和管理已经成为一个不可或缺的部分。无论是互联网应用、企业系统还是移动应用&#xff0c;都需要与数据库进行频繁的交互。因此&#xff0c;选择一种合适的编程语言和相应的库来进行数据库编程显得尤为重要。C…

易支付二次元网站源码及部署教程

易支付二次元网站源码及部署教程 引言 在当今数字化时代&#xff0c;二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求&#xff0c;搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程&#xf…

左神算法基础巩固--2

文章目录 稳定性选择排序冒泡排序插入排序归并排序快速排序堆排序 哈希表链表解题 稳定性 稳定性是指算法在排序过程中保持相等元素之间相对顺序的特性。具体来说&#xff0c;如果一个排序算法是稳定的&#xff0c;那么对于任意两个相等的元素&#xff0c;在排序前它们的相对顺…

leetcode 458. 可怜的小猪

题目&#xff1a;458. 可怜的小猪 - 力扣&#xff08;LeetCode&#xff09; 数学问题。 尝试次数 times minutesToTest / minutesToDie 每只猪可以承载的数据量 bit times 1 答案 ret 就是 bit ^ ret > buckets 时&#xff0c;ret 的最小值。 特殊的&#xff0c;注意…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

10. C语言 函数详解

本章目录: 前言1. C 语言函数概述1.1 函数的定义与结构1.2 函数声明1.3 函数调用 2. 函数参数传递2.1 传值调用2.2 传引用调用&#xff08;模拟&#xff09;2.3 引用调用&#xff08;C 特性&#xff09; 3. 内部函数与外部函数3.1 内部函数3.2 外部函数3.3 示例&#xff1a;多个…