以下是平时群里搜集的热键控制扩展用法,一起贴出来分享一下
感谢AHK社区的群友们分享代码
PS:以下示例都用SetTimer,因为Loop循环强占线程不易跳出。适应SetTimer循环后,可实现多段异步循环
像Win这种特殊键需要管理员权限运行才能控制,可将以下代码加入脚本头部自提权
;脚本自检测,如果不是管理员就自动以管理员权限运行自身
if !(A_IsAdmin || InStr(DllCall("GetCommandLine", "str"), ".exe"" /r"))
RunWait % "*RunAs " (s:=A_IsCompiled ? "" : A_AhkPath " /r ") """" A_ScriptFullPath """" (s ? "" : " /r")
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.autoahk.com/?s=%Clipboard%&type=post
Clipboard := ""
Clipboard := ClipHuanYuan
ClipHuanYuan := ""
Return
#IfWinActive
15.对特殊按键的修改和发送字符串
; 分号键改成半角小写【可用AhkSpy脚本获取对应按键码】
vkBA::Send {text}`;
; Send {text}可以发送字符串,用于录入信息
F1::Send {text}Hello World
谢谢
学习了
谢谢分享
nice
?
感谢作者分享,非常好的一些源代码。由于AutoAHK.COM 暂时没有可用的离线实时同步源代码库(本地离线数据库与网站在线源代码库登录连接实时同步更新编辑保存),所以我只好自制源代码数据库了,选择使用微软的mdb文件作为数据库( ms office中的Access查看和编辑mdb数据库),用Delphi设计窗口界面,搜索框的OnChange()事件函数可以实现即输即搜,无需按回车键就可以实时全文搜索源代码正文内容,实时修改,实时保存,实时备份历史多版本副本。把源代码分类整理收纳到数据库中,手动备份数据库文件到 群晖DS1821Plus网络附属存储服务器的RAID 1镜像存储池中。 也可以使用Visual FoxPro 9.0 或者 MySQL 或者其他什么编程语言或者数据库来设计自己的源代码库。从而拥有一个可以实时全文搜索源代码正文内容的,分类整理好的,自己长期收集的,强大好用的,《编程源代码》数据库系统应用程序软件。
之所以自己设计源代码管理软件是因为一些现成的管理软件我感觉不好用。我需要灵活的(离线或者在线都可以用,有网或无网都可以用,可能是我孤陋寡闻了),智能的(全文搜索),实时的(实时搜索,实时保存,实时备份,实时同步),绿色免安装的(Delphi),安全的(指纹识别登录源代码库,实时多版本异地备份),可修改的(有完整的Delphi源代码,想怎么改就怎么改),我感觉还是自己做的软件窗口比较好用一点。
感谢作者分享,
谢谢
感谢作者分享,学到了很多
谢谢老板?
大佬的世界问题辣么神秘且完美!
赞?
?赞
感谢很实用了
感谢
ganxie
赣西
非常感谢db大佬分享。??
小弟有个小小的完善,可以把第5个脚本中的第六行代码~LButton Up::Settimer, LianDian, Off,最前面的热键加一个*变成~*LButton Up,这样可以防止鼠标抬起时点击不及时停止的问题。?
收到,感谢反馈?
非常感谢大佬分享,解决了大问题,感谢!!
谢谢老板!??
多谢整理分享
谢谢分享
感谢分享。非常有用的整理。?
感谢分享
?
mark
感谢分享
这个必须要赞一下,收藏?
cool
谢谢分享
可以将带序号的编辑为标题,这样就可以在右侧自动生成目录了。
请问下5.利用Loop机制和函数,实现随时立即终止连招能使用同一个按键么
; 按F3启动或停止连招
F3::
if (onoff := !onoff)
SetTimer F1, -1
else
立即中断:=1
Return
谢谢分享
收藏学习
谢谢大神分享,学习
学习了
谢谢大神分享,学习了