AutoHotKey自动热键(七)WINDOWS按键映射与鼠标映射(替换/组合)

该脚本支持简单的按键替换,可以针对某个窗口进行按键替换,还可以对鼠标和键盘进行互相替换,也可以用来禁用一些按键

键盘按键映射

普通按键映射

复制代码
a::b

这样子就直接在全局把所有的a键输入都映射成b键输出

上面这一行在执行过程中相当于拆解成下面两个,第一个是按下,第二个是弹起

复制代码
*a::
SetKeyDelay -1   
Send {Blind}{b DownTemp}  
return

*a up::
SetKeyDelay -1 
Send {Blind}{b Up}
return

设置按键无延迟, 如果目标键是鼠标则使用SetMouseDelay代替,不加上这一行默认是有20的延迟

DownTemp 和 Down 相似, 不过使用 DownTemp 时脚本中后面的其他 Send 命令则不会假定 "b" 仍然处于按下的状态.

所有的勾子热键都不会被同脚本中的send命令触发,想要直接运行直接使用Gosub +触发即可

{Blind}保持Alt/Control/Shift/Win按住的状态

复制代码
+s::Send {Blind}abc

在按下shift+S的时候,原本是输出abc,但是由于send中第一个是{Blind},那么按下的shift键的down按下状态会一直保持,所以输出的是ABC

实用按键推荐: 把 ` 键映射成回车键,方便左手回车

复制代码
`::enter

个人觉得最实用的就是这个功能了,因为长期使用电脑的人都知道,回车键是我们工作学习中用得最多的按键,而右手经常需要控制鼠标,两个回车键全在右侧,导致回车按键按起来不方便,所以把数字1左侧的这个点的按键映射成回车非常实用

映射按键的开关

比如要关闭刚才的映射a::b,可以再另一段内部加上如下功能

复制代码
+F8::
Hotkey, *a, off
Hotkey, *a up, off
Return

只管关闭*a和*a up即可,因为a::b实际上就是折分成这两个

大小写反向映射

复制代码
a::B

其结果是这样, 按下的小写输出大写,按下大写输出小写

  • a=B
  • A=b

使用虚拟键码准确指向按键

复制代码
sc01e::vk42sc030

上面一行相当于 a::b

  • VK是虚拟键码(十六进制) 两位数
  • SC键盘扫描码(十六进制) 三位数
  • 单独写可以,两种表示方法一起写也可以
  • 可以在主窗口的 View->Key history 菜单项找到刚刚按下的按键的键码表,如若找不到,把虚拟键码从十进制转成16进制一样可以得到
  • 必须用VK/SC表示的三个键:{ } %
  • 映射不支持三个键: 鼠标滚轮 (WheelUp/Down/Left/Right) 和 Pause 和 Break 键

禁用按键

;禁用WIN键和F1键示例

复制代码
;LWin::Return
;F1::return 会禁用 F1 键

映射组合键

把右CTRL映射成CTRL+ALT+A

复制代码
;RCtrl::^!a

鼠标按键映射

鼠标映射键盘

把鼠标右键映射成WIN键

复制代码
RButton::LWIN

键盘映射鼠标

WIN键+上下左右控制鼠标上下左右移动

复制代码
*#up::MouseMove, 0, -10, 0, R  ; Win+UpArrow 热键 => 上移光标
*#Down::MouseMove, 0, 10, 0, R  ; Win+DownArrow => 下移光标
*#Left::MouseMove, -10, 0, 0, R  ; Win+LeftArrow => 左移光标
*#Right::MouseMove, 10, 0, 0, R  ; Win+RightArrow => 右移光标

键盘模拟鼠标左击和右击

复制代码
*<#LCtrl:: 
SendEvent {Blind}{LButton down}
KeyWait # ; 防止键盘自动重复导致的重复鼠标点击.
SendEvent {Blind}{LButton up}
return

*<#Alt::  
SendEvent {Blind}{RButton down}
KeyWait alt  ; 防止键盘自动重复导致重复的鼠标点击.
SendEvent {Blind}{RButton up}
return

LWIN+LCTRL = 鼠标左击

LWIN+LALT = 鼠标右击

映射的有条件生效

因为映射对键盘的影响默认是无条件生效(全局热键),所以这种操作我们大部分时候都要把它局限在某个条件之中,否则反而会带来负作用

复制代码
#IfWinActive ahk_class Notepad
 a::b
#IfWinActive  ;结束符

让 'a' 键到 'b' 键的映射仅在记事本中有效.

相关推荐
代码方舟4 小时前
零信任架构实战:基于天远运营商三要素简版V即时版查询构建自动化电子投保实名核验网关
大数据·人工智能·架构·自动化
wtblszn9 小时前
空压机在线监测物联网方案
大数据·运维·物联网·自动化·能源
天远数科10 小时前
零信任架构实战:基于天远运营商三要素简版V即时版查询构建自动化买手实名核验网关
运维·人工智能·架构·自动化
weixin_4045512411 小时前
自动化数据库理解:用 AI 与 LLM 自动推断表的用途与关系
数据库·人工智能·自动化
智能RPA11 小时前
金融行业智能体自动化平台对比评测报告(银行核心与监管报送场景)
人工智能·金融·自动化·agent·rpa
szxinmai主板定制专家12 小时前
RK3568+FPGA+CODESYS异构控制方案:赋能半导体设备与工业自动化升级
人工智能·fpga开发·自动化·rk3576·半导体设备
红红谈说12 小时前
浏览器自动化环境老是起不来?依赖治理与启动自检的一次复盘
运维·自动化·浏览器自动化·进程残留·环境依赖·启动自检·版本比较
机核研创社14 小时前
服装自动化观察:接橡筋机的超声波熔切与冷刀,差别到底在哪
运维·自动化
欣欣之王来了14 小时前
AI合规专项:AI自动化决策的合规管控要点
运维·人工智能·自动化
海宇AI14 小时前
零信任架构实战:基于海宇车辆估值构建自动化二手车收车测算网关
运维·人工智能·架构·自动化