AutoHotkey热键控制的进阶用法

以下是平时群里搜集的热键控制扩展用法,一起贴出来分享一下。方便更多AHK用户的定制

感谢AHK社区的群友们分享代码

PS:以下示例都用SetTimer,因为Loop循环强占线程不易跳出。适应SetTimer循环后,可实现多段异步循环

像Win这种特殊键需要管理员权限运行才能控制,可将以下代码加入脚本头部自提权

 ; AHK脚本以管理员权限自启
if !A_IsAdmin && !RegExMatch(_:=DllCall("GetCommandLineW", "Str"), " /restart(?!\S)")
    RunWait % "*RunAs " RegExReplace(_, "^\"".*?\""\K|^\S*\K", " /restart")

1.一键三用,单击、双击、长按

优点:稳定。缺点:单击时有400毫秒延时。不适合常用键。删除第2~5行和第20行可改为单击双击。

F1::
KeyWait, F1, T0.5
if (ErrorLevel = 1) {
    Msgbox 长按
 } else {
if (winc_presses > 0) {
    winc_presses ++
    Return
} winc_presses = 1
SetTimer KeyWinC1, -400
Return

KeyWinC1:
if (winc_presses = 1) {
    Msgbox 单击
 } else if (winc_presses = 2) {
    Msgbox 双击
} winc_presses = 0
Return
} Return

2.右键双击不影响原按键 By FeiYue

不影响单击工作,双击反应也快。

~*RButton::
t:=-oldt+(oldt:=A_TickCount)
if (t<100 || t>400)
    Return
 else oldt:=0  ; 双击后向下执行
    Msgbox,4096,, 双击
Return

3.键盘大小写状态判断

CapsLock键在键盘中比较特殊,用第二行的SetCapsLockState来做CapsLock键反制,然后接着用if判断状态

CapsLock::
SetCapsLockState % !GetKeyState("CapsLock", "T")
if GetKeyState("CapsLock", "T") {
    ToolTip 大写
 } else {
    ToolTip 小写
}
Return

4.按某键就启动,松开停止

主要用于狂点鼠标或者连击某键(第一行的50是循环的间隔为50毫秒)【示例为鼠标左键】

~*LButton::SetTimer LianDian, 50
~*LButton Up::SetTimer LianDian, Off

LianDian:
Send  {LButton}
Return

或者

~LButton::
While GetKeyState("LButton","P") {
    Send a
} Return

5.利用Loop机制和函数,实现随时立即终止连招

优点:可实现随时立即终止连招

缺点:对延时中止的精度不是绝对的高

F1::
Global 立即中断:=0
Loop 1 {   ; 把循环的1次去掉就是无限循环
    Send("a")
    Sleep(1000)
    Send("{b}")
    Sleep(1000)
    Send("c")
    Send("d")
    Sleep(1000)
    Send("{e}")
} Until 立即中断
Return

F2::立即中断:=1

Send(按键) {
    if !立即中断
        Send % 按键
}

Sleep(延时) {
    if (!立即中断) {  ; 把超过100毫秒的Sleep拆分成10份,方便急停
        if 延时>100
            延时 := 延时//10, 拆分=1

        if 拆分=1
            Loop 10
                if !立即中断
                    Sleep 延时
             Until 立即中断
          else
            if !立即中断
                Sleep 延时
    }
}

6.按住Alt触发鼠标连点

在上条基础上扩展而来,做为组合键触发鼠标连点(第三行的50是循环的间隔为50毫秒)

~*LButton:: 
If GetKeyState("Alt", "P") {
    Settimer, LianDian, 50 
} Return 

~*LButton Up::Settimer, LianDian, Off

LianDian: 
Send  {LButton} 
Return 

7.单热键无限循环开关

按一下为启动循环,再按一下为停止循环(第三行的50是循环的间隔为50毫秒)

; 布尔值切换判断
F1::toggle := !toggle

; 三元运算开关切换
F1 Up::Settimer KaiGuan, % toggle=0 ? "Off" : 50

KaiGuan:
Send a
return

8.功能热键开关,按一次打开,再按一次关闭

用于功能开关,像电视遥控一样,按一次打开,再按一次关闭

F1::
if (onoff := !onoff) {
    MsgBox, 布尔值为%onoff%`n第一次开
 } else {
    MsgBox, 布尔值为%onoff%`n第二次关
} Return

9.双开关互锁,两个开关只能循环运行其中一个

【运行一个时,另一个会停止】

F1::
F1onoff := !F1onoff, F2onoff=0
SetTimer F2循环, Off
SetTimer F1循环, % F1onoff=0 ? "Off" : 50
ToolTip
return

F2::
F2onoff := !F2onoff, F1onoff=0
SetTimer F1循环, Off
SetTimer F2循环, % F2onoff=0 ? "Off" : 50
ToolTip
return

F1循环:
ToolTip F1循环%F1onoff%
return

F2循环:
ToolTip F2循环%F2onoff%
return

10.同时按AB键

F1::Send,{a down}{b down}{b up}{a up}

11.脚本控制,暂停、重新开始、退出

Loop {
	Sleep, 10
	ToolTip, 持续运算演示-%A_Index%
}

F3::pause
F4::Reload
Esc::ExitApp

12.按住Capslock再按wsad变成上下左右

按F1键来切换1键的输出内容

*CapsLock::Toggle=1
*CapsLock Up::Toggle=0

#if Toggle
w::Send {Up}
s::Send {Down}
a::Send {Left}
d::Send {Right}
#if

F1::onoff := !onoff   ; 【示例】按F1后,1键变成0,再按一次,1键变成9

#if onoff
1::0
#if

#if !onoff
1::9
#if

13.判断进程是否打开,没打开则启动程序,开着则唤醒目标

F1::
Process, Exist, hh.exe
if ErrorLevel {
    WinActivate, ahk_class HH Parent
 } else {
    Run D:\AHK热键\AutoHotkey-v1.1.33.02_帮助文件中文.chm
} return

14.热键可以只在指定窗口下生效

像Ctrl、Alt、Shift键是分左右的,可以选择性组合达到更好的分配

#IfWinActive ahk_class HH Parent

RCtrl & Enter::
ClipHuanYuan := ClipboardAll
Clipboard := ""
Send ^a
Send ^x
ClipWait, 2
Run, https://www.baidu.com/s?wd=%Clipboard%
Clipboard := ""
Clipboard := ClipHuanYuan
ClipHuanYuan := ""
Return

#IfWinActive

15.对特殊按键的修改和发送字符串

; 分号键改成半角小写【可用AhkSpy脚本获取对应按键码】
vkBA::Send {text}`;

; Send {text}可以发送字符串,用于录入信息
F1::Send {text}Hello World
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
AutoHotkey 脚本文件需要以 UTF-8 with BOM 编码格式保存,以避免在使用非ASCII字符时出现乱码问题。你可以在保存文件时,选择“UTF-8 with BOM”编码格式来确保文件不会出现乱码。如果你在使用 AutoHotkey 时遇到了热键乱码的问题,请确保你的脚本文件是以正确的编码格式保存的。你可以参考 AutoHotkey 的 FAQ 页面中关于编码的部分来获取更多详细信息。 另外,AutoHotkey 的脚本文件是以 .ahk 为后缀名的纯文本文件,你可以在脚本文件中定义各种热键,并在热键中执行相应的操作。例如,你可以定义一个热键为 #z 来打开一个网页,同时也可以定义一个热键为 ^!n (Ctrl + Alt + N) 来打开记事本软件。确保你的脚本文件中热键的定义是正确的,并且使用了正确的按键符号。 希望以上信息对解决你的问题有所帮助。如果你还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [aardio + AutoHotkey 混合编程](https://blog.csdn.net/jacenhe/article/details/127040236)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [如何使用 AutoHotkey](https://blog.csdn.net/xyxing87/article/details/123964111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值