文档
中文使用手册--http://ahkcn.sourceforge.net/docs/AutoHotkey.htm
HotKey文章之一
创建脚本
每个脚本都是一个纯文本文件,由一些能被 AutoHotKey.exe 执行的命令组成。一个脚本可能还包含热键 和热字符串 。如果没有热键和热字符串,脚本在启动的时候就会从头依次执行到尾。
创建一个新的脚本:
- 下载 并安装 AutoHotkey。
- 右击鼠标,选择 新建 -> 文本文档 。
- 输入文件名并确保以 .ahk 结尾。例如:Test.ahk。
- 右击文件,选择 编辑脚本 。
- 输入以下内容: #space::Run www.baidu.com
上一行的第一个字符 "#" 代表键盘上的 Windows 键;所以 #space 表示在按住 Windows 键后再按空格键。"::" 后面的命令会在热键激活后执行,在本例中则会使用系统默认浏览器打开百度主页。继续按下面步骤操作,来执行这个脚本:
- 保存并关闭该文件。
- 双击该文件来启动它。在系统托盘里会出现一个新图标。
- 按下 Windows 和空格键,网页会在默认的浏览器里打开。
- 右击系统托盘里的绿色图标可以退出或编辑当前脚本。
注意:
- 可以同时启动多个脚本,并且在系统托盘里都会有一个相应的图标。
- 每个脚本都能定义多个 热键 和 热字符串 。
- 想让某个脚本开机即启动,可以将它的快捷方式放到开始菜单的启动目录里 。
本小节参考自: 本小节参考自: AutoHotKey 新手入门教程==>https://blog.csdn.net/redraiment/article/details/6183040
HotKey文章之二
AutoHotKey 是一个免费的键盘宏程序,可以用于配置键盘快捷键、鼠标事件
以及摇杆事件,还可以在输入文本的时候对文本进行扩展(自动补全)
第一个脚本
新建文件test.ahk
并输入以下内容:
^!n::
Run, notepad
Return
保存文件,双击执行,可以在右下角看到脚本执行的图标,
然后按下Ctrl
+Alt
+N
就可以打开记事本程序。
AutoHotKey 快捷键命令大概可以分为三个部分:
::
左边的部分表示需要按下的快捷键,^
表示Ctrl
,!
表示Alt
::
右边部分表示需要执行的命令- 最后
Return
表示结束命令
另外除了快捷键(HotKey)配置, AutoHotKey 还可以配置 HotStrings,
相当于我们平时使用的 IDE 中的文本自动补全功能
在电脑右下角的脚本执行图标上右键,单击“编辑脚本”,
会弹出一个记事本程序来编辑当前运行的脚本,加入如下内容:
::hw::Hello World!
保存文件,关闭编辑器,在右下角脚本图标上右键,单击“重新加载脚本”,
然后来测试一下脚本功能,首先Ctrl
+Alt
+N
打开记事本,
输入hw
,按下Enter
或Tab
就会进行自动补全,用Hello World!
替换hw
。
特殊符号
像^
表示Ctrl
这种快捷键中的特殊符号,意义如下:
符号 | 意义 |
---|---|
# | Win(键盘上有Windows图标的键) |
! | Alt |
^ | Ctrl |
+ | Shift |
我们除了可以像上面的一样定义全局快捷键之外,
另外还有一些用于Windows的特殊命令,可以用于定义特定窗口的快捷键,如:
#IfWinActive
表示窗口是否处于激活状态,可以用于指定在特定窗口下可用的快捷键,
如下脚本表示在Untitled - Notepad
窗口中按下Win+P
按键会弹出窗口
提示“你按下了Win+P”
#IfWinActive Untitled - Notepad
#space::
MsgBox, 你按下了Win+P
Return
#IfWinActive
或者win10中文版使用中文名
#IfWinActive 无标题 - 记事本
#space::
MsgBox, 你按下了Win+P
Return
#IfWinActive
#IfWinExist
表示窗口是否存在
发送按键 - 一键当千
快捷键后的命令部分除了执行命令运行程序之外,还可以向电脑发送按键单击事件,
就相当于 AutoHotKey 帮你去按下按键,从而获取按下一个快捷键相当于一堆按键。
LCtrl::
Send, AutoHotKey
Return
上述命令表示按下左边Ctrl
按键时会发送按键,依次按下AutoHotKey
,
对于键盘上的一些特殊按键,如Ctrl
等都有对应的表示,如:^
表示Ctrl
,!
表示Alt
等等,除了这种类似快捷键特殊符号的表示,还可以使用{...}
的方式来
表示,如:{lAlt}
表示左边的Alt
键,{F1}-{F24}
表示键盘上的F1
到F24
键等。
; 按下Win+H就等于按下Ctrl+Alt+HOME键
#h::
Send, ^!{HOME}
Return
其实,除了^
、!
、+
、#
可以表示组合键之外,
其他的{...}
形式的符号都只是按顺序敲击键盘罢了,
比如:^{HOME}
表示按下Ctrl
的同时按下HOME
键,
而{Ctrl}{HOME}
则表示按下Ctrl
松开,然后按下HOME
键。
若是想要实现组合键的功能,可以使用{Ctrl Down}
和{Ctrl Up}
这种组合,
表示按下和松开{Ctrl}
键,在这两个之间的符号都会在按住Ctrl
的情况下执行。
也就是说:^{HOME}
= {Ctrl Down}{HOME}{Ctrl Up}
!= {Ctrl}{HOME}
注:支持的Send键列表见官方文档,
但是要注意的是除了官方文档提供的按键可以使用{...}
形式,
其他的按键都不可以使用,如{a}
就是一种错误的表达方式
另外,Send后的部分可以分多行以便于阅读,只要用括号括起来就可以:
^j::
Send,
(
Line 1
Line 2
A dobe
)
Return
本小节参考自: AutoHotKey 快速入门==>https://www.cnblogs.com/baiyangcao/p/autohotkey_basic.html
好用脚本
用AutoHotkey一键打开、激活、或隐藏Chrome(或其他软件)
热键的效果:
1、Chrome没打开时,打开Chrome
2、Chrome已打开,未激活时,则激活Chrome
3、Chrome已激活,则隐藏Chrome
本来这种功能对AutoHotkey来说非常简单,
但是在激活Chrome或FireFox浏览器的时候却总是无效,
经朋友指点是有些程序的窗口会存在N个子窗口,
所以增加了寻找主窗口HWND的过程,就可以正常激活了。
完整代码如下:
#a::hyf_onekeyWindow("d:\Chrome\Chrome.exe", "Chrome_WidgetWin_1", "\S") ;注意修改Chrome路径
hyf_onekeyWindow(exePath, titleClass := "", titleReg := "")
{ ;有些窗口用Ahk_exe exeName判断不准确,所以自定义个titleClass
SplitPath, exePath, exeName, , , noExt
If !hyf_processExist(exeName)
{
;hyf_tooltip("启动中,请稍等...")
Run,% exePath
;打开后自动运行 TODO
funcName := noExt . "_runDo"
If IsFunc(funcName)
{
;hyf_tooltip("已自动执行函数:" . funcName)
Func(funcName).Call()
}
Else If titleClass
{
WinWait, Ahk_class %titleClass%, , 1
WinActivate Ahk_class %titleClass%
}
}
Else If WinActive("Ahk_exe " . exeName)
{
funcName := noExt . "_hideDo"
If IsFunc(funcName)
Func(funcName).Call()
WinHide
;激活鼠标所在窗口 TODO
MouseGetPos, , , idMouse
WinActivate Ahk_id %idMouse%
}
Else
{
If titleReg
titleClass := "Ahk_id " . hyf_getMainIDOfProcess(exeName, titleClass, titleReg)
Else If titleClass
titleClass := "Ahk_class " . titleClass
Else
titleClass := "Ahk_exe " . exeName
WinShow %titleClass%
WinActivate %titleClass%
funcName := noExt . "_activeDo"
If IsFunc(funcName)
{
;hyf_tooltip("已自动执行函数:" . funcName)
Func(funcName).Call()
}
}
}
hyf_processExist(n) ;判断进程是否存在(返回PID)
{ ;n为进程名
Process, Exist, %n% ;比IfWinExist可靠
Return ErrorLevel
}
hyf_tooltip(str, t := 1, ExitScript := 0, x := "", y := "") ;提示t秒并自动消失
{
t *= 1000
ToolTip, %str%, %x%, %y%
SetTimer, hyf_removeToolTip, -%t%
If ExitScript
{
Gui, Destroy
Exit
}
}
hyf_getMainIDOfProcess(exeName, cls, titleReg := "") ;获取类似chrome等多进程的主程序ID
{
DetectHiddenWindows, On
WinGet, arr, List, Ahk_exe %exeName%
Loop,% arr
{
n := arr%A_Index%
WinGetClass, classLoop, Ahk_id %n%
;MsgBox,% A_Index . "/" . arr . "`n" . classLoop . "`n" . cls
If (classLoop = cls)
{
If !StrLen(titleReg) ;不需要判断标题
Return n
WinGetTitle, titleLoop, Ahk_id %n%
;MsgBox,% A_Index . "/" . arr . "`n" . classLoop . "`n" . titleLoop
If (titleLoop ~= titleReg)
Return n
}
Continue
}
Return False
}
hyf_removeToolTip() ;清除ToolTip
{
ToolTip
}
AutoHotKey:如何将脚本配置为在用户登录后自动启动?
将ahk脚本文件或者快捷方式放到启动目录。
启动目录位于:
开始菜单--》程序--》启动 右击它进入
#IfWinActive xxx - yyy 中的xxx和yyy如果定位
方法1:
1、用autohotkey自带的window spy,右击autohotkey的托盘图标-》window spy
2、但window spy对某些窗体的控件检测不到。
3、通常获取不了的控件都是用颜色或图像来判断位置所在。(颜色也可以通过window spy查看)
方法2:
1、自己编代码检测窗体控件。
#PersistentSetTimer, WatchActiveWindow, 200returnWatchActiveWindow:WinGet, ControlList, ControlList, AToolTip, %ControlList%return
2、该代码与window spy检测的是一样的。
ps:按钮、滚动条、输入框等就是控件。
文章结束,以上就是关于autohotkey检测窗体控件的两种方法,如果你也有同样的疑问,那就赶快按照以上方法试试吧!
本小节源自: autohotkey检测窗体控件的两种方法==>https://www.jb51.net/softjc/599199.html
我的样例
::hw::hello world!
#IfWinActive * - 记事本
#space::
MsgBox, 你按下了Win+space
Return
#IfWinActive
/*
注释模式一
*/
; 注释模式二 如果要用ctrl+r 触发 f5功能 , 可能需要Send {f5} , 尚未偿试
; 注释模式二 在winscp中按f5时,用ctrl+r的刷新功能替换f5的下载功能,亲测成功
#IfWinActive ahk_exe WinSCP.exe
f5::
Send, ^r
Return
#IfWinActive