###详情及本人常用热键脚本见如下链接,主要包括常用热键、选择即复制/剪贴/替换、excel水平滚动等功能:https://pan.baidu.com/s/1WWQb8y9Qm9pINVRQG-DKkQ?pwd=c3t9
###补全了之前说ahk定义的foobar热键:鼠标放在歌单界面,alt+1/2/3切换歌单,放在歌单界面左侧,alt+1/2/3/4/5,实现可视化功能切换
★★★◆◆◆☻✘✔『』※♣♠♥§◤◇♀♂☞♫♪◎
【关键点】
-
(30)(29)(28)(27)(26)(25)(24)(23)(22)(21)(20)(19)(18)(17)(16)(15)(14)(13)(12)(11)(10)(9)(8)(7)
-
(6)版本:要用大漠,只能安装32位版本
- v1.1.32之前版本找色只能从左上角开始,之后版本可以从矩形的任意一个角开始
-
(5)与其他编程语言对比
- AHK和Python的比较(GUI)
-
(4)开发工具:
- ★★★★★VS code添加ahk开发插件后还不错
- AutoAHK-史上最强,最适合中文Autohotkey开发者的开发环境,没有之一
注意
-
(3)注意
-
ahk中字符串连接不用&用空格即可
b := 123 ;c显示出来为abc123 c := a b msgbox,% c c显示出来为abc123
-
路径拼接
folder = G:\Programme\AutoHotkey\Speos\test name:="456.xmp" ahh:= folder "\" name ;拼接结果为G:\Programme\AutoHotkey\Speos\test\456.xmp
-
-
GUI-edit控件的变量名称前必须加字母v,但若要调用变量中的值,需要使用变量名
%ShiJian%
,而非%vShiJian%
:例如Gui, Add, Edit, vShiJian ym
-
创建变量无需使用%,但获取变量值必须加%,如
%AppNow%
,如果不加%,得到的结果为字符串AppNow- 但如下情况可不加%
-
在参数中的输入或输出变量: StringLen, OutputVar, InputVar
-
在赋值的左侧,可以不加,但右侧变量必须加:
Var = 123abc
-
在传统(非表达式) if 语句的左侧:
If Var1 < %Var2%
-
在表达式中的任意位置.
-
例如:
Var1 := Var2 + 100
-
ImageSearch, FoundX, FoundY, 800, 39, 1110, 415, *100 %A_WorkingDir%\image\Snipaste_2022-07-03_17-50-41.bmp X:=FoundX+9
-
-
if (AppNow="Code.exe")
-
APP和AppNow均为变量,都不嫩加%,否则报错
if (App = AppNow)
-
内置变量:
if (A_Cursor="IBeam")
-
- 但如下情况可不加%
-
if下要执行多行内容,必须用大括号,否则只能执行第一行
!z:: ;『EXCEL』账号表修改注册表 If WinActive("账号 - Excel") send,^+c If WinActive("ahk_exe XYplorer.exe") { Click,Right Send,I } Return
-
优缺点
-
(2)优缺点:AHK相对于大漠和按键精灵的优缺点
- 优点:
- ★★★★可以随意组合按键指定为热键,如按下X和B,执行某个流程。用按键精灵发现热键不够用,但用AHK发现热键多的用不完
- ★★★★★大漠对窗口操作特别麻烦,操作窗口前必须要绑定窗口,但AHK完全不需要
- ★★★★按键精灵只能设置一个快捷键,但AHK可以为一个脚本设置无数个快捷键;所以按键精灵一个快捷键只能对应一个脚本文件,但AHK可以将很多脚本放在一个文件中分别设置快捷键
- 即使在屏幕分辨率和缩放比是非百分之百的情况下ahk也能正常的识别;而按键精灵这个固执的的开发者这个bug一直没有改掉
- ★★★★★超级强的权限,甚至可以随意修改系统的默认快捷键
- ★★★执行速度快于按键精灵和大漠
- ★★★★可拦截系统快捷键,非常适合设置快捷键,快捷键可随意组合
- 缺点:
- ◆◆◆◆后台不行:无法后台找图找色
- 优点:
帮助文档
- (1)帮助文档:
- 软件下载:
- AHK创建第一个脚本
- 中文帮助:
- ★★★★★★可搜索:AutoHotkey 初学者向导 | AutoHotkey v1
- AutoHotkey 中文手册 - 手册 - 文江博客
- 中文帮助文档下载:AutoHotkey 中文化项目 download | SourceForge.net
- 中文社区『内含大量实例代码』:AutoAHK – 让电脑更懂你!
- [AHK]AutoHotKey 常用命令及示例
- 优秀代码片段:
- AutoHotkey:常用技巧分享 | 上篇
- AutoHotkey:常用技巧分享 | 下篇
- 常用按键代码:按键, 鼠标按钮和操纵杆控制器的列表 - AutoHotkey 中文手册
- 找不到的按键可利用该链接文章中的特殊按键方法找到按键代码,如
~
按键代码为SC029
- 找不到的按键可利用该链接文章中的特殊按键方法找到按键代码,如
- 可自动生成所选窗口的代码『但位置有偏差,ahk自带的windows spy抓取的位置比较准确』
【问题】
-
(60)(59)(58)(57)(56)(55)(54)(53)(52)(51)(50)(49)(48)(47)(46)后台单击控件如何超时
-
(45)AHK如何把变量值传给ppt的宏
-
(44)如何表示appdata目录:
-
该命令似乎不起作用:
If FileExist(%USERPROFILE%\AppData\Local\Mozilla\Firefox\Profiles)
-
这个凑合用
If FileExist("C:\Users\"A_UserName "\AppData\Local\Mozilla\Firefox\Profiles")
-
-
(43)拦截广告弹窗
-
(42)通过teamviewer远程控制发送ahk设置的热键不起作用:用rustdesk软件远程控制可正常使用
-
(41)单击命令无法像uipath一样超时
-
(40)调用大漠提示没有注册类:如果已经注册大漠,那么很可能是安装了64为AHK,大漠只兼容32为AHK
-
(39)win11上无法输入特殊符号:但win10上可以正常使用,
-
★★★写入剪贴板后粘贴
clipboard := "★★★★★" Send ^v
-
★★输入特殊符号
s & 3::send {U+0E4F}
,特殊符号代码查看Unicode 符号表 - 所有 Unicode 字符及其代码都在一页上 (◕‿◕) SYMBL -
可能是win11不支持这些特殊符号
-
-
(38)ahk让ppt运行组合命令
-
前台发送热键干涉
-
后台热键怎么不起作用
-
-
(37)如何判断一个软件是否支持通过com对象操作
-
(36)如何用ahk保存PPT
-
直接调用com对象
ppt:=ComObjActive("powerpoint.application") ppt.Visible := true ppt.ActivePresentation.Save()
-
向窗口发消息
-
-
(35)如何遍历所有按键,判断当前被按下没弹起的按键
if GetKeyState("Shift") MsgBox At least one Shift key is down. else MsgBox Neither Shift key is down.
-
(34)按钮的位置单击如何变成直接类似uipath单击控件:窗口大小改变或者不同分辨率的电脑中位置单击会错位
-
找图分辨率变了还是遇见找不到的问题
-
uipath能解决大部分类似问题,但执行速度较慢,每次运行都要调用robot
-
PyAutoGUI
-
如何向软件发送消息操作软件替代鼠标单击
-
-
(33)如何激活lucidshape中的小窗口:
-
ControlFocus,LucidShape_openGL_Window1, ahk_exe LucidShape.exe
可以使得焦点切换到窗口上,但还是未激活,工具栏无法点击 -
ControlClick, LucidShape_openGL_Window1, ahk_class OWL_Window ahk_exe LucidShape.exe
与上面命令相同的问题
-
-
(32)ahk如何判断一个无界面的后台软件是否在后台运行:利用存在元素活动,如下框中需要输入进程名称『如果为ahk脚本,最好发布为名称不同的exe程序,直接运行ahk脚本显示的进程名都是
AutoHotkey.exe
如果后台多个ahk脚本在运行则无法判断』 -
(31)ahk隐藏窗口标题栏后最大化窗口不能填充满屏幕:非ahk之罪,实则鼠标手势软件StrokesPlus.net只过,将该软件的最小化窗口由命令改为快捷键alt+esc即可
-
(30)热键脚本shift+鼠标滚轮实现水平滚动失效:重启excel可解决
-
(29)对指定excel文件的操作热键失效:失误操作导致同时选中了多个表,此时打开的工作簿标题后多加了个组字,而ahk脚本是按工作簿标题识别窗口的,此时相当于标题改变,自然无法识别到指定的窗口
-
(28)winclose无法关闭部分窗口,如
WinClose, ahk_exe ManicTimeClient.exe
-
尝试
PostMessage, 0x0112, 0xF060,,, WinTitle, WinText ; 0x0112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE
-
尝试:
WinKill, Calculator
-
直接发送热键关闭
WinWait, ahk_exe ManicTimeClient.exe SendInput,!{f4}
-
-
(27)给ASC软件后台发送热键不起作用
ControlSend,,{AltDown}{f4}{AltUp},ahk_exe ASC.exe
-
(26)xyporer利用ahk最小化窗口不起作用:
-
run后加min不起作用
-
利用WinMinimize则会让窗口隐藏:执行前加WinActivate激活窗口
Run,D:\SoftWare\XYplore\XYplorer.exe,, WinWait, ahk_exe D:\SoftWare\XYplore\XYplorer.exe WinActivate,ahk_exe D:\SoftWare\XYplore\XYplorer.exe WinMinimize
-
-
(25)搜狗中文导致快速输入当前日期错误输入04、3、021/2:英文输入法可正常输入:关闭智能调整数字后标点,且自定义标点输入/不改为、
-
(24)ahkinfo1.3.5界面中的图标是如何绘制的:图形是可以直接转化为代码的
-
(23)ahk如何后台找色:无后台找色功能
-
可调用大漠插件执行后台找色
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. ;安装键盘和/或鼠标钩子 #InstallKeybdHook #InstallMouseHook ;F12:: ;WinSet, AlwaysOnTop , Off,雷电模拟器-spe CoordMode Mouse CoordMode,Pixel,Screen #SingleInstance force ;;执行程序前先关闭程序 ;创建大漠对象 dm:=ComObjCreate("dm.dmsoft") ver:= dm.ver() ;调用大漠的插件版本查询函数,只会出现两种情况返回值为空及返回值为版本号。 /* if (ver) ;如果版本号存在 MsgBox,,,注册成功!版本号为%ver%,1 else MsgBox,,,注册失败!`n请检查ahk版本及大漠是否已注册到系统`n请参考大漠接口说明-常见问题-创建对象失败怎么办,4 ;设置目录 dm_ret = dm.SetPath("D:\Program Files (x86)\damo\zhuce") */ ;找色必备函数 ComVar(Type=0xC) { static base := { __Get: "ComVarGet", __Set: "ComVarSet", __Delete: "ComVarDel" } ; 创建含 1 个 VARIANT 类型变量的数组. 此方法可以让内部代码处理 ; 在 VARIANT 和 AutoHotkey 内部类型之间的所有转换. arr := ComObjArray(Type, 1) ; 锁定数组并检索到 VARIANT 的指针. DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(arr), "ptr*", arr_data) ; 保存可用于传递 VARIANT ByRef 的数组和对象. return { ref: ComObjParameter(0x4000|Type, arr_data), _: arr, base: base } } ComVarGet(cv, p*) { ; 当脚本访问未知字段时调用. if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[] return cv._[0] } ComVarSet(cv, v, p*) { ; 当脚本设置未知字段时调用. if p.MaxIndex() = "" ; 没有名称/参数, 即 cv[]:=v return cv._[0] := v } ComVarDel(cv) { ; 当对象被释放时调用. ; 必须进行这样的处理以释放内部数组. DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(cv._)) } ;下面就是脚本部分了 省略—————————————————————— ;hwnd := dm.FindWindowByProcess("hexin.exe","","") hwnd := dm.FindWindow("Afx:00400000:b:00010003:00000006:00091749","") ;hwnd := dm.GetForegroundWindow() ;后台绑定 dm_ret := dm.BindWindow(hwnd,"dx2","normal","normal",0) ;if dm_ret=1 ;MsgBox,绑定成功 ;前台绑定 ;dm_ret = dm.BindWindow(hwnd,"normal","normal","normal",0) intX:=ComVar() intY:=ComVar() dm_ret2 := dm.FindColor(700,825,1520,826,"00e600-000000",1.0,2,intX.ref,intY.ref) If (dm_ret2=0) MsgBox,没找到 else MsgBox,% intX[] "," intY[] dm.MoveTo(intX[],intY[]) F11::Reload ; 调试热键 return
-
-
(22)如何先按列找色,而不是先按行:加FAST为按行找色,取消fast为按列找色,但按列找色速度超慢,如果找色区域太大,则需要花费很长时间
PixelSearch, OutputVarX, OutputVarY, 1518,810,818,976,0xFFFF00,0,Fast RGB
-
(21)找色位置并非实际的位置,总有偏移:
-
找色代码前需设置为相对于整个屏幕找色
CoordMode,Pixel,Screen
-
同时设置鼠标相对于整个屏幕:
CoordMode,Mouse,Screen
-
-
(20)该热字符串单独测试正常,但放在热键脚本中无法使用
::smm::X1789961457Y
-
按键S被作为辅助键了,导致s键失效,利用
$s::s
实现S键的输入,所以按下s键后不是由键盘输入的S键,而是由ahk脚本输入的,况且又开了勾子,自然无法检测到输入的S键smm
-
-
(19)自动保存脚本中利用
ControlSend,,{CtrlDown}s{CtrlUp},%App%
发送保存命令,经常出现只发送按键s,导致原来内容被破坏-
可以直接像工具栏控件发送命令,而非整个窗口,如向xmind工具栏发送保存命令
ControlSend,ToolbarWindow3210,{CtrlDown}s{CtrlUp},%App%
-
excel中可利用com命令实现保存,参考问题18
-
-
(18)AHK如何利用代码替换ctrl+s按键保存命令
-
excel中可使用如下命令实现保存:但编辑状态下总是弹窗提示
xl := ComObjActive("Excel.Application") ;获取当前活动的 Excel 实例的句柄 xl.Visible := true xl.ActiveWorkbook.Save()
-
但该命令保存时若excel正在处理数据或有其他操作,则会提示
被呼叫方拒绝接受呼叫
错误:可利用try/catch捕获异常弹窗『Tty后的大括号内为经常抛出异常的代码』Try { xl := ComObjActive("Excel.Application") ;获取当前活动的 Excel 实例的句柄 xl.Visible := true xl.ActiveWorkbook.Save() }
-
-
-
(17)
A_Now< %now_date%160000
比较结果错误 -
(16)AHK时间如何相加减
-
EnvSub:必须带日期
var1 := 20050126 var2 := 20040126 EnvSub, var1, %var2%, days MsgBox, %var1% ; 结果将是 366, 因为 2004 是个闰年.
-
-
(15)何为键盘勾子:使用 键盘钩子 的热键不会被 Send 命令的方法触发
-
一篇搞懂键盘钩子问题
-
-
(14)移动指定窗口不起作用
WinMove,ahk_exe 倒计时.exe,, 0, 0
-
(13)AHK如何实现判断某段时间内是否有按键,如按键精灵中
GetLastKey()
:执行了GetLastKey()一遍后,会抹除记录,如果中间没有再按键,再次执行GetLastKey(),会得到0,也就是没有按键-
★★★★★内置变量
A_TimeIdle
:从系统最后一次接收到键盘, 鼠标或其他输入后所经过的毫秒数 -
★★★★★★内置变量
A_TimeIdlePhysical
:与上面类似, 但在安装了相应的钩子(键盘或鼠标) 后会忽略模拟的键击和/或鼠标点击; 即此变量仅反应物理事件. (这样避免了由于模拟键击和鼠标点击而误以为用户存在.) 如果两种钩子都没有安装, 则此变量等同于 A_TimeIdle. 如果仅安装了一种钩子, 那么仅此类型的物理输入才会对 A_TimeIdlePhysical 起作用(另一种/未安装钩子的输入, 包括物理的和模拟的, 都会被忽略). -
%A_PriorKey%变量可以得到最后一个按键,但不能清洗历史状态,且不支持鼠标点击;可以没隔一段时间获取一次,跟上次获取的按键对比
-
-
(12)keywait如何监控鼠标滚轮?AHK如何判断鼠标滚轮活动
-
(11)IF判断运行报错:
if (App = AppNow)
中变量不能加%,否则报错 -
(10)热键脚本频繁卡死导致部分按键失效
-
似乎是平滑滚动脚本导致,失效时滚动鼠标滚轮立马正常
-
鼠标手势软件StrokesPlus.net也会导致ahk程序卡死,结束鼠标手势软件后ahk程序可正常退出
-
★★★类似
x::x
的代码,导致程序进入死循环,正确写法应该为$x::x
,修改后偶尔还会出现快捷键失效 -
★★★★加入代码
F7::Reload
,实现按下F7重启代码 -
未加延迟,在重要流程之间加延迟:
sleep,100
-
MouseClick,left,2导致热键失效,改为
MouseClick, left sleep,10 MouseClick, left
-
-
(9)如何让打开脚本就自动执行,执行完退出即可:
-
(8)经常出现按键按下无法弹起『主要是ctrl』,导致其他按键都无法使用:
-
可能是按下与弹起分开的热键导致
{CtrlDown}{shiftDown}a{shiftup}{CtrlUp}
-
似乎是在excel界面下!3或!4热键导致该问题:将
SendInput,^{PgDn}
修改为SendInput,{CtrlDown}{PgDn}{CtrlUp}
问题似乎解决了,三键组合可以写为sendinput {CtrlDown}{shiftDown}a{shiftup}{CtrlUp}
-
可能是用包含ctrl的热键调用自身导致:
$^c::^c
-
用热键调用其他组合热键时『热键中被调用的热键有相同按键』,等待热键释放后再调用『但会导致按下热键后有延迟』
$!s:: KeyWait Alt KeyWait Control send,^!z return
-
★★制作弹起脚本,挨个弹起所有按键
-
★设置热键重启脚本
F7::Reload ; 调试热键
-
-
(7)热键发送自身为何会出错:
-
热键 ^c::Send ^c 将导致一个无限键击循环 。要避免这种情况,为热键定义添加 $ 前缀 (例如 $^c::),使得热键不能被 Send 命令触发。
!c:: send,!c
-
-
(6)字母辅助热键导致作为辅助热键的字母输入缓慢:前缀按键也可以设定其自己的动作,但只有当按键被松开的时候才被触发,可能是为了区分是单独按键还是组合按键
-
★★★★没必要判断大写是否打开:虽然不能完全解决输入缓慢的问题,但输入速度应该算相对快的了『后期输入尽量使用讯飞语音吧』
x & c::^!c x::x
-
★★★根本原因是类似
d::
的单独按键作为快捷键时,鼠标弹起才会生效,而一般输入法按下字母按键即可生效,快速打字过程中,频繁出现一个字母未弹起时按下另一个字母按键,从而导致作为热键的字母无法输入:执行命令前加入{backspace}
删除输入的字符:虽然完全解决了输入缓慢的问题,但会导致excel中英文输入状态下错误删除表格中的内容x & c::send {backspace}^!c ~x::
-
感觉差不多
if GetKeyState("CapsLock", "T")
是否比GetKeyState, state, CapsLock,T
if (state = "D")
更快捷:作用不大 -
SendInput
比Send
输入按键更快 -
★★★取消判断cspslock是否打开,直接用
$x::x
,该方法不影响大写字母的输入:有点效果,但还是会出现有时无法输入 -
使用~符号:但会导致输入d键
~d & 2::send ◆◆
-
-
(5)字母辅助热键导致作为辅助热键,xyplorer中快速跳转到快捷方式功能失效:shift切换为英文状态下搜索,而非切换为大写搜索
-
(4)修改注册表
-
(3)如下代码导致无法输入书名号『将
,
按键设置为热键』, & o::!o ;Alt+O打开欧陆词典搜词界面 ,::send, , +,::<
-
(2)导致热键不起作用,单字母按键可正常使用
Space & e:: Space::send, {Space}
-
调整两行代码的先后顺序后完美解决
Space::Send, {Space} Space & e::
-
-
(1)指定excel快捷键
【碎片】
-
(100)(99)(98)(97)(96)(95)(94)(93)(92)(91)(90)(89)(88)(87)(86)(85)(84)(83)(82)(81)(80)(79)(78)(77)(76)(75)(74)(73)(72)(71)(70)(69)(68)(67)遍历文件夹,拿到指定格式文件的文件名
folder = G:\Programme\AutoHotkey\Speos\test Loop, %folder%\*.xmp { FileAppend %A_LoopFileName%|,%folder%\out.txt,UTF-8 } return
-
(66)操作软件菜单命令:大多数软件不支持,目前似乎只有记事本和xmind可用
- 用swapy64软件可以识别到
!menu
的都可以使用上面命令操作 - 在记事本界面选择
打开
命令:WinMenuSelectItem, ahk_exe NOTEPAD.EXE,,文件,打开
- 操作speos的界面:
WinMenuSelectItem, ahk_exe VisionLabViewer.exe,,Tools,Color Management,Color space conversion,Maintain lightness and hue
- 用swapy64软件可以识别到
-
(65)操作PPT
-
(64)保存当前打开的CATIA文档:
CATIA := ComObjActive("CATIA.Application") CATIA.Visible := true CATIA.ActiveDocument.Save()
-
(63)复选框的选择与取消筛选:
-
选择复选框:
Control, Check, , Button6, ahk_exe VisionLabViewer.exe
-
取消复选框:
Control, Uncheck, , Button6, ahk_exe VisionLabViewer.exe
-
-
(62)选择下拉列表的项目:
- 根据项目字符串选择:
Control, ChooseString, Local adaptation, ComboBox1, ahk_exe VisionLabViewer.exe
- 根据项目排序位置选择:
Control, Choose, 5, ComboBox1, Installer
- 根据项目字符串选择:
-
(61)鼠标位置相对于弹出窗口的位置:
- ahhinfo脚本获取的位置有偏差
- ahk自带的windows spy获取的位置准确:
-
(60)文件及文件夹操作
-
创建文件夹:
FileCreateDir,%USERPROFILE%\AppData\Local\FastStone
-
创建删除文件夹:
FileRemoveDir, %AppData%\SmoothScroll, 1
-
复制文件:
FileCopy, C:\*.txt, C:\My Folder
-
移动文件夹及其所有子文件夹和文件. 它还可以重命名文件夹:
-
移动文件夹『不需要加引号』:
FileMoveDir, C:\My Folder, D:\My Folder
-
只重命名:
FileMoveDir, C:\My Folder, C:\My Folder (renamed), R
-
-
-
(59)检查文件或文件夹或驱动器是否存在:路径需要加引号
-
if FileExist("D:\")
MsgBox "The drive exists."
-
引用变量不要加%:
If FileExist("C:\Users\"A_UserName "\AppData\Local\Mozilla\Firefox\Profiles")
-
-
(58)相对路径:
%A_ScriptDir%
代表当前脚本所在目录Run, %A_ScriptDir%\firefox.exe --profile "%A_ScriptDir%\defaults\pref"
-
(57)后台向foobar发送热键不起作用:
ControlSend, NGLV1,!s,ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
-
(56)AHK调用其他脚本代码:如果我们需要让 AHK 暂停,先运行调用的脚本直到运行起来的脚本退出才继续,可以用 RunWait 命令取代 Run,除了这个区别,用法上和 Run 是一致的。
-
调用脚本当前目录下的bat文件
Run, %A_ScriptDir%\mklink.bat
-
调用其他ahk脚本:
-
★★★★GB2312编码下路径不能有中文,否则会出错『编码格式设置为UTF-8 with BOM可解决该问题』
-
Include命令『相当于把调用的文件中的代码完全复制到主脚本当前位置执行,所以如果调用的代码结尾为
exitapp
,则执行完毕后会退出主脚本』:#Include G:\Programme\AutoHotkey\AutoZhuiZong.ahk
-
-
AHK调用uipath发布的流程『UTF-8 WITH BOM编码格式下路径可以有中文』:
run,"C:\Program Files (x86)\UiPath\Studio\UiRobot.exe" -file "G:\Programme\UiPath\Robot\慧博报表数据.1.0.1.nupkg"
-
操作excel
-
(55)操作excel:AutoHotkey实现Excel自动化
-
获取的单元格行号和列号为变量:
Hang:=4 lie:=2 strCell := objExcel.Cells(Hang,lie).Value MsgBox, % strCell
-
将D5:L5数据复制到
D19:L19:objExcel.Range("D19:L19").Value := objExcel.Range("D5:L5").Value
-
若19为变量,可现在excel中获取变量单元格范围,如D20:L20,后用ahk操作
Range01:=objExcel.Range("C2").Text objExcel.Range(Range01).Value:= objExcel.Range("D5:L5").Value
-
-
等待刷新完后计算:似乎有问题,不起作用
xlapp = win32com.client.DispatchEx("Excel.Application") xlapp.CalculateUntilAsyncQueriesDone() ;直到刷新完毕 strCell := objExcel.Calculate
-
刷新当前激活的工作簿:
strCell := objExcel.ActiveWorkbook.RefreshAll
-
计算当前工作簿:
strCell := objExcel.Calculate
-
A1单元格中写入
AutoHotkey
:objExcel.Cells(1, 1).Value := "AutoHotkey"
-
读取单元格E2内容:
objExcel := ComObjActive("Excel.Application") strCell := objExcel.Cells(2,5).Value MsgBox, % strCell
-
-
(54)等待窗口动作:
-
等待标题中包含
属性
的窗口关闭:WinWaitClose, 属性
-
等待窗口出现:
WinWait,ahk_exe Everything.exe
-
等待进程出现:
Process, Wait, exit.exe
-
-
(53)字符串转化为图片文件:
Null_ico:="0000010001002020100000000000E8020000160000002800000020000000400000000100040000000000000200000000000000000000100000001000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000007770CCCCCCCCCCCCCCCCCCCCC07770007070CCCCCCCCCCCCCCCCCCCCC07070007770CCCCCCCCCCCCCCCCCCCCC0777000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF80000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000FFFFFFFFFFFFFFFFFFFFFFFF" Null_ico_File=%A_Temp%\Null.ico ;字符串转二进制 StrToBin(Str) { XMLDOM:=ComObjCreate("Microsoft.XMLDOM"), xmlver:="<?xml version=`"`"1.0`"`"?>" XMLDOM.loadXML(xmlver), Pic:=XMLDOM.createElement("pic"), Pic.dataType:="bin.hex", pic.nodeTypedValue := Str, StrToByte := pic.nodeTypedValue return StrToByte } ; 数据流保存为文件 BYTE_TO_FILE(body, filePath) { Stream := ComObjCreate("Adodb.Stream"), Stream.Type := 1, Stream.Open(), Stream.Write(body), Stream.SaveToFile(filePath,2), Stream.Close() } BYTE_TO_FILE(StrToBin(Null_ico),Null_ico_File)
-
(52)匹配标题:需提前开启匹配模式,要匹配的标题无需添加正则表达式*
;标题匹配模式 SetTitleMatchMode, 2 SetTitleMatchMode, Fast
-
(51)输入字符串:
- 后台输入:
ControlSetText,Edit1,300502,ahk_exe hexin.exe
- 后台输入:
-
(50)AHK操作EXCEL
-
在第一行第一列输入“AutoHotkey”:
objExcel.Cells(1, 1).Value := "AutoHotkey"
-
现在我们把刚才存入的数据读取并显示出来:
strCell := objExcel.Cells(1, 1).Value
-
另存为其他文件
objExcel.ActiveWorkbook.SaveAs("C:\test.xls")
-
保存
objExcel.Workbook.Save()
-
保存激活的工作簿
xl := ComObjActive("Excel.Application") ;获取当前活动的 Excel 实例的句柄 xl.Visible := true xl.ActiveWorkbook.Save()
-
参考
- AutoHotkey实现Excel自动化
-
-
(49)操作office:
-
office(Excel word PPT)各功能的消息号不完全枚举(PostMessage用)
-
Autohotkey在office中的应用
-
-
(48)运算
- 取余数:
mod(5, 3)
,结果为2 - 舍去小数位:
Floor(1.2)
,结果为1
- 取余数:
找色
-
(47)找色:只支持前台找色,窗口被遮挡后无法找色,后台找色需要借助大漠
-
获取指定坐标的颜色值,获取的结果相当于16进制颜色值前加
0x
:PixelGetColor, OutputVar, 1510, 931,RGB
-
在指定范围内找色『ErrorLevel结果为1则没找到,为0则找到,且ErrorLevel需要放在找色命令的下一行,中间不能间隔其他代码,否则不再是找色的结果』:颜色代码前必须加
0x
否则,不管什么颜色都显示已经找到,且输出找到的颜色位置错误CoordMode Mouse ; 设置获取鼠标坐标系为全屏 CoordMode Pixel ; 设置取色坐标系为全屏取色 PixelSearch, OutputVarX, OutputVarY, 1506,840,1521,967,0x00FF00,0 ,Fast, RGB If (ErrorLevel=0) MsgBox,%OutputVarX%,%OutputVarY% else MsgBox,未找到 return
- 默认BGR颜色格式,代码后RGB才能按RGB格式找色
-
-
(46)弹窗实现方案
- msgbox弹窗『窗口位置样式无法自定义,但最简单』:
msgbox,要显示的内容
- ToolTip『窗口位置可定义,但样式无法自定义』:高兼容 高性能 简单易用 自定义效果丰富的 ToolTip
- GUI弹窗『可以随意定义样式和位置,但最为复杂』
- msgbox弹窗『窗口位置样式无法自定义,但最简单』:
-
(45)文件写入与读取
-
读取文件中的内容,读取结果存入变量DaiMa:
FileRead, DaiMa,E:\展望未来\代码.txt
-
写入内容到文件
-
利用变量
title
中的内容覆盖文件title.txt
中的内容『先删除title.txt
,后新建该文件』FileDelete, %A_ScriptDir%\中转站.txt FileAppend,%title%,%A_ScriptDir%\中转站.txt,UTF-8
-
-
-
(44)设置窗口状态:
-
隐藏窗口到后台:
Winhide,ahk_exe Suo10_SmartRAM.exe
- 任务栏图标存在,且会导致SmartRAM软件任务栏图标打不开软件
-
最大化指定窗口:
WinMaximize,ahk_exe Speos.Labs.Pre.LivePreview.exe
,若不起作用,可尝试PostMessage, 0x0112, 0xF030,,,ahk_exe Speos.Labs.Pre.LivePreview.exe
,或者多加个标题匹配 -
标题为
消息框
的窗口置顶:WinSet,
AlwaysOnTop , On,消息框
-
取消置顶
-
取消标题为消息框的窗口置顶:
WinSet, AlwaysOnTop , Off,消息框
-
取消foobar2000窗口置顶:
WinSet, AlwaysOnTop , Off,ahk_exe foobar2000.exe
-
-
置底:同花顺置底不起作用
WinSet,Bottom,,分析 ahk_class Afx:00400000:b:00010003:00000006:09EC0857
-
-
(43)移动指定窗口到左上角
WinWait, ahk_exe 倒计时.exe WinMove,0,0
-
(42)输入框
-
inputbox的输入框界面样式难以调节:
InputBox, OutputVar , Title, Prompt, HIDE, Width, Height, X, Y, Locale, Timeout, Default
-
GUI输入框
; 示例: 要求输入姓名的简单输入框: Gui, Add, Text,, First name: Gui, Add, Text,, Last name: Gui, Add, Edit, vFirstName ym ; ym 选项开始一个新的控件列. Gui, Add, Edit, vLastName Gui, Add, Button, default, OK ; ButtonOK(如果存在)会在此按钮被按下时运行. Gui, Show,, Simple Input Example return ; 自动运行段结束.在用户进行操作前脚本会一直保持空闲状态. GuiClose: ButtonOK: Gui, Submit ; 保存用户的输入到每个控件的关联变量中. MsgBox You entered "%FirstName% %LastName%". ExitApp
-
GUI
-
(41)GUI:并不能像消息框一样阻断后续脚本运行
-
按钮控件位置设置
- X向相对于上一控件『文本』的最右边向左移动450像素,Y向相对于上一控件的底边向下移动10像素
GUI, ADD, BUTTON,X+-450 Y+10 W200 Default gquxiao, 取消提示
- X向相对于上一控件『文本』的最右边向左移动450像素,Y向相对于上一控件的底边向下移动10像素
-
AHK倒计时测试
-
GUI弹窗『可定义显示位置』
SetBatchLines -1 Gui, +LastFound +ToolWindow +AlwaysOnTop ;弹窗背景色 Gui, Color,A3CEA3 ;字体设置 GUI, Font, w200 Q5 s25 bold c2b2b2b , Microsoft Yahei ;弹窗显示的内容 GUI, ADD,TEXT, W200 CENTER vtime1, % "01:00:00" ;显示弹窗标题及设置弹窗位置 gui,show,autosize X1500 Y933, 倒计时测试 return
- +ToolWindow 避免显示任务栏按钮
- AlwaysOnTop: 让窗口置顶
- LastFound: 设置窗口为上次找到的窗口(对于 Gui 线程这是多余的, 因为它自动设置了), 这样允许类似 WinSet 这样的命令对此窗口进行操作, 即使它当前为隐藏状态(即不需要使用 DetectHiddenWindows). 需要在显示窗口之前改变其属性时, 这是非常有用的
-
-
(40)倒计时
- MsgBox倒计时的三种方法
- AHK倒计时测试
-
(39)关闭窗口
- 关闭窗口『似乎软件也被关闭而不是在后台继续运行』:
WinClose, Calculator
- 强制关闭
WinKill, Calculator
- 只关闭窗口不退出软件『类似于按下热键Alt+F4』:
PostMessage, 0x0112, 0xF060,,,ahk_exe PopBlock.exe
- 发送热键『容易被其他操作干扰』:
SendInput,!{f4}
- 关闭窗口『似乎软件也被关闭而不是在后台继续运行』:
-
(38)关闭, 重启或注销系统
- 关机:
Shutdown,1
- 休眠:
DllCall("PowrProf\SetSuspendState", "int", 0, "int", 0, "int", 0)
- 关机:
-
(37)换行:
`n
- 消息弹窗内容换行:
MsgBox,123 `n 456
- 消息弹窗内容换行:
-
(36)表达式计算
-
若C2单元格为19,则结果为C19:D19
position:=objExcel.Range("C2").Text Range01=D%position%:L%position%
-
到x结果为1+1:
x=1+1
-
赋值:得到x的结果为2:
x:=1+1
-
-
(35)经过时间:
-
变量A_TickCount:计算机启动后经过的毫秒数, 最多为 49.7 天. 通过把 A_TickCount 保存到变量中, 经过一段时间后从最近的 A_TickCount 值中减去那个变量, 可以计算出所经过的时间. 例如:
StartTime := A_TickCount Sleep, 1000 ElapsedTime := A_TickCount - StartTime MsgBox, %ElapsedTime% milliseconds have elapsed.
-
案例
-
(34)脚本案例
- 鼠标_选择文字释放右键自动复制
- 倒计时休眠
- 根据输入时间倒计时
后台
-
(33)后台窗口操作
-
获取窗口控件中文本:
ControlGetText, OutputVar, Edit19, ahk_exe XYplorer.exe
-
后台输入:
-
如下为
输入公司名称-
一次输入,速度更快:
ControlSetText,Edit1,300502,ahk_exe hexin.exe
-
该命令一个一个输入字符串,由于软件每输入一个数字都需要时间检索,所以该命令无法正常输入:
ControlSend,Edit1,300502,ahk_exe hexin.exe
-
-
-
后台单击『必须加NA,否则目标窗口会激活』:
-
单击坐标:
ControlClick, x640 y1034,ahk_exe hexin.exe,,Left,1,NA
-
单击控件:
ControlClick, Edit1, 分析 ahk_exe hexin.exe,,Left,1,NA
-
-
给后台的进程名为
XMind.exe
的软件发送保存命令:ControlSend,,^s,ahk_exe XMind.exe
- 当xmind窗口为活动窗口时,该命令不起作用,可修改为
ControlSend,,{CtrlDown}s{CtrlUp},ahk_exe XMind.exe
- 当xmind窗口为活动窗口时,该命令不起作用,可修改为
-
给后台的标题名为变量
%App%
的软件发e送保存命令:ControlSend,,^s,%App%
-
后台发送按键和操作鼠标
-
-
(32)前台发送按键
- 发送保存命令『速度更-快,且不会与用户正在输入内容干涉』:
SendInput,^s
- 速度较慢:
Send,^s
- 发送保存命令『速度更-快,且不会与用户正在输入内容干涉』:
循环
-
(31)循环
-
循环三次
Loop,3 { ... }
-
无限循环,循环体中不能出现return和break
Loop { ... }
-
若在loop的循环体中加入return,则只能循环一次
Loop { MsgBox 123 return }
-
-
(30)跳转:
Goto, MyLabel ; ... MyLabel: Sleep, 100 ; ...
- 可从括号内跳转到括号外,但不能从括号外跳转到括号内,也不能从一个括号跳转到另一个括号
-
正常跳转
{ Goto,BiaoQian13 BiaoQian12: MsgBox, BiaoQian12 } BiaoQian13: MsgBox, BiaoQian13
-
运行报错
Goto,BiaoQian13 { BiaoQian12: MsgBox, BiaoQian12 BiaoQian13: MsgBox, BiaoQian13 }
-
- 可从括号内跳转到括号外,但不能从括号外跳转到括号内,也不能从一个括号跳转到另一个括号
-
(29)等待鼠标按键按下
- 超时2S,若鼠标左键未单击则ErrorLevel返回值为1,否则返回0:
KeyWait, LButton, D T2
- 超时2S,若鼠标左键未单击则ErrorLevel返回值为1,否则返回0:
-
(28)等待键盘按键按下『只能监控键盘按键,无法监控鼠标点击』:若有列出的任一按键按下,则执行后续流程,此时ErrorLevel返回值为Match;否则超时5s后,仍然执行后续流程,但ErrorLevel返回值为Timeout;若要输入内容到活动窗口,则必须加
V
,设置为可见,不加V
,将导致部分按键按下不起效果Input, UserInput,T5 V,{esc}{LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Delete}{Ins}{BS}{CapsLock}{NumLock}{PrintScreen}{Pause}{RButton},a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z if (ErrorLevel = "Timeout") { ;鼠标单击:超时2S KeyWait, LButton, D }
获取窗口参数
-
(27)获取窗口参数
-
根据进程名获取窗口相关参数
- 获取窗口标题:
WinGetTitle,title,ahk_exe hardware02.exe
- 获取窗口标题:
-
获取鼠标指向窗口的相关参数
- 获取窗口进程名:获取的结果会存入变量OutputVar中
WinGet, OutputVar, ProcessName,A
- 获取窗口类名:
WinGetClass,OutputVar, A
- 获取窗口标题
WinGetActiveTitle, OutputVar
- 获取窗口进程名:获取的结果会存入变量OutputVar中
-
-
(26)获取鼠标状态:直接利用内置变量
%A_Cursor%
可获取- 当前显示的鼠标光标类型. 其值为下列单词的其中一个: AppStarting(程序启动, 后台运行–箭头+等待), Arrow(箭头, 正常选择–标准光标), Cross(十字, 精确选择), Help(帮助, 帮助选择–箭头+问号), IBeam(工字光标, 文本选择–输入), Icon, No(No, 不可用–圆圈加反斜杠), Size, SizeAll(所有尺寸, 移动–四向箭头), SizeNESW(东南和西北尺寸, 沿对角线调整 2–双箭头指向东南和西北), SizeNS(南北尺寸, 垂直调整–双箭头指向南北), SizeNWSE(西北和东南尺寸, 沿对角线调整 1–双箭头指向西北和东南), SizeWE(东西尺寸, 水平调整–双箭头指向东西), UpArrow(向上箭头, 候选–指向上的箭头), Wait(等待, 忙–沙漏或圆圈), Unknown(未知). 与 size 指针类型一起的首字母表示方向, 例如 NESW = NorthEast(东北)+SouthWest(西南). 手型指针(点击和抓取) 属于 Unknown 类别.
-
(25)脚本执行完自动退出,在脚本末 尾加
Exitapp
,但之前不能用return
,return
相当与结束命令,会导致之后的所有脚本无法运行
找图
-
(24)找图:严格匹配,包括颜色
ImageSearch, FoundX, FoundY, 810, 68, 1040, 358, G:\Programme\AutoHotkey\image\Snipaste_2022-07-03_16-57-31.bmp
-
找图并单击图片中心:AHK找图坐标x,y均小于『偏移』实际坐标位置6个像素,所以图片中心坐标为(找图坐标+图片尺寸一般-6)
CoordMode Mouse CoordMode,Pixel,Screen ImageSearch, FoundX, FoundY, 800, 39, 1110, 415, *100 %A_WorkingDir%\image\Snipaste_2022-07-03_16-57-31.bmp X:=FoundX+9 Y:=FoundY+15 ;ControlClick,x%X% y%Y%,ahk_exe Joplin.exe;后台单击 Click,%X% %Y%;前台单击
-
提前设置工作路径
ImageSearch, FoundX, FoundY, 800, 39, 1110, 415, *100 %A_WorkingDir%\image\Snipaste_2022-07-03_17-50-41.bmp
-
若图像颜色有轻微变化,可以在图像路径前添加*n设置颜色匹配度
ImageSearch, FoundX, FoundY, 978, 39, 1352, 415, *100 G:\Programme\AutoHotkey\image\Snipaste_2022-07-03_16-57-31.bmp
-
-
(23)输入当前日期:
;输入当前日期 s & r:: FormatTime, now_date, %A_Now%, MM/dd/yyyy ;获取当前时间 Send, % now_date ;输出时间戳 Return
-
(22)等待 Control 被释放,按键释放后才会执行后续流程
KeyWait Control
- 等待鼠标左键被按下:
KeyWait, LButton, D
- 等待鼠标左键被按下:
-
(21)按键按下与弹起
*LWin::Send {LControl down} *LWin Up::Send {LControl up} Send, {b down}{b up}
-
(20)设置调试热键
^!r::Reload ; Ctrl+Alt+R
-
(19)获取位置坐标:
- 获取控件左上角位置:
- 获取鼠标当前坐标位置
MouseGetPos, xpos, ypos
输入指定内容
-
(18)输入指定内容(输入字符串)
-
写入剪贴板后粘贴
clipboard := "『』" Send ^v{Left}
-
不切换输入法,实现中英文混合输入『win10支持,win11上无法输入后面的汉字』
SendInput,{Text}1784961452@qq.com啊哈
-
发送大写T,且不弹出输入法窗口:
SendInput, {Text}T
-
输入特殊符号
s & 3::send {U+0E4F}
,特殊符号代码查看Unicode 符号表 - 所有 Unicode 字符及其代码都在一页上 (◕‿◕) SYMBL- 输入项目符号黑点•:
send {U+2022}
- 输入项目符号⁋:
send {U+204B}
- ↪:21AA
- ☪:262A
- ☯:262F
- ♣:2663
- ⮚:2B9A
- ⮞:2B9E
- 输入项目符号黑点•:
-
-
(17)若软件不存在则打开,若没激活,则激活
-
(16)运行指定程序
-
用指定软件打开指定文
run,D:\Program Files\ANSYS Inc\v241\Optical Products\Viewers\XmpViewer.exe "G:\Programme\AutoHotkey\Speos\test\456.xmp"
-
显示窗口:
Run, D:\Program Files (x86)\XYplorer\XYplorer_v22.90.0100.7\XYplorer.exe
-
不显示窗口运行『后台』:
Run, D:\SoftWare\欧路词典\OLED&欧路词典-Spe.exe,,Hide
-
运行后最小化窗口:
Run, D:\SoftWare\欧路词典\OLED&欧路词典-Spe.exe,,Min
- 部分软件不支持该命令:可手动设置开机启动,后在注册表中查看形成的代码,不同软件的隐藏命令不同
- SmartRAM可用如下实现启动最小化:
Run,D:\SoftWare\Advanced SystemCare 8\Suo10_SmartRAM.exe /m
- ASC:
Run,D:\SoftWare\Advanced SystemCare 8\ASCTray.exe /auto
- SmartRAM可用如下实现启动最小化:
- 部分软件不支持该命令:可手动设置开机启动,后在注册表中查看形成的代码,不同软件的隐藏命令不同
-
-
(15)让鼠标滚轮实现水平滚动
~LControl & WheelUp:: ; 向左滚动. ControlGetFocus, fcontrol, A Loop 2 ; <-- 增加这个值来加快滚动速度. SendMessage, 0x114, 0, 0, %fcontrol%, A ; 0x114 是 WM_HSCROLL, 它后面的 0 是 SB_LINELEFT. return ~LControl & WheelDown:: ; 向右滚动. ControlGetFocus, fcontrol, A Loop 2 ; <-- 增加这个值来加快滚动速度. SendMessage, 0x114, 1, 0, %fcontrol%, A ; 0x114 是 WM_HSCROLL, 它后面的 1 是 SB_LINERIGHT. return
-
(14)取消格式粘贴:定义x+v为取消格式粘贴快捷键
;取消格式粘贴 x & v:: clipboard := clipboard send,^v Return
-
(13)根据不同的激活窗口执行不同的命令
-
方案一:括号中内容需要加引号,若根据窗口进程名查找则为
If WinActive("ahk_exe notepad.exe")
;自动化表筛选K列 !x:: If WinActive("数据自动化 - Excel") Send,^+l ;EXCEL-Next表刷新筛选 If WinActive("Next - Excel") Send,^!l
-
多个窗口都执行同一命令,
or
连接即可If WinActive("ahk_exe UiPath.Studio.exe") or WinActive("ahk_class XLMAIN") send,^!{Right}
-
-
方案二:似乎不起作用
#IfWinActive ahk_class Notepad ^!c::MsgBox You pressed Control+Alt+C in Notepad. #IfWinActive ahk_class WordPadClass ^!c::MsgBox You pressed Control+Alt+C in WordPad. #IfWinActive ^!c::MsgBox You pressed Control+Alt+C in a window other than Notepad/WordPad.
-
激活窗口
-
(12)激活窗口wintitle:
- 根据窗口标题名称激活
WinActivate,Joplin
- 根据窗口类名激活:
WinActivate, ahk_class ConsoleWindowClass
- 根据窗口进程名称激活
WinActivate, ahk_exe notepad.exe
- 根据窗口进程路径激活:
WinActivate, ahk_exe G:\Programme\AutoHotkey\AHKInfo-1.3.5.ahk
- 根据窗口标题名称激活
-
(11)判断当前激活的窗口标题是否为joplin,若为joplin,则执行后续流程。
-
若指定窗口未激活,则激活;若已经激活,则最小化
-
方案一:不管是否有激活窗口都可以执行
;激活雷电模拟器 ~Space & l:: IfWinNotActive ahk_exe dnplayer.exe WinActivate,ahk_exe dnplayer.exe Else WinMinimize Return
-
方案二:必须当前有激活窗口,否则不起作用
;激活火狐 ~Space & f:: if WinActive("ahk_exe firefox.exe") WinMinimize Else WinActivate,ahk_exe firefox.exe Return
-
根据窗口进程名称判断:
if WinActive("ahk_exe Code.exe")
其中Code.exe
为窗口的进程名称 -
根据窗口标题判断
if WinActive("Joplin") MsgBox, 4, ,拾取坐标 x:%x% y:%y% 此弹窗3秒后关闭, 3 Return
- 窗口标题有时候不是大漠抓取的窗口,而是strokesplus抓取的根所有者窗口标题
- 窗口标题有时候不是大漠抓取的窗口,而是strokesplus抓取的根所有者窗口标题
-
-
(10)消息弹窗:脚本格式最好修改为GB2312,否则中文显示乱码
MsgBox At least one Shift key is down.
MsgBox, 4, ,拾取坐标 x:%x% y:%y% 此弹窗3秒后关闭, 3
-
(9)实现按一下F1,脚本暂停,再按一下F1,脚本启用,按键替换也是一样
F1::Pause
-
(8)区分左右alt键:
<!
为左alt,>!
为右alt
发送热键/按键
-
(7)发送热键/按键:
- 按下ctrl:
Send, {Control down}
- 发送大写T,且不弹出输入法窗口:
SendInput, {Text}T
- 多字母按键:
send, {up}
- 单按键:
Send,^!1
- 按下ctrl:
-
(6)延迟:
Sleep, 125
-
(5)注释:
-
行注释:
;注释内容
-
段落注释
/* 注释段落 */
-
热键设置
-
(4)设置执行快捷键『』
-
用双击作为热键
~RButton:: intInterval := 500 ; 若两次连击在这个时间间隔中,则视为双击。 if (A_PriorHotkey <> "~RButton" or A_TimeSincePriorHotkey > intInterval) { KeyWait, RButton return } ;TO DO……此处写入你想要热键干的事 return
-
热字符串:输入btw后会被替代为by the way
::btw::by the way
,但与组合热键b & 2::Send 『』{Left}
同时使用会失效,同时占用按键b -
★★★★★自定义组合热键:不影响t键单独使用,且输入按下大写T不会输入小写t
t & c::!o ;Alt+O打开欧陆词典搜词界面 t:: GetKeyState, state, CapsLock,T ;不管热键的第一个按键为哪个字母,该行中字母T不能改变 if (state = "D") SendInput, {Text}T Else send t Return
-
按下S+2,输入
『』
,需要加^s::^s,
否则ctrl+s保存功能无法使用『当字母键作为辅助热键时,其他利用该字母的组合热键都需要重建,否则无法使用』S & 2:: Send 『』 Send,{Left} ^s::^s s:: GetKeyState, state, CapsLock,T if (state = "D") SendInput, {Text}S Else send s Return
-
自定义组合热键:不影响t键单独使用,但使用热键前会输入字母t
~t & c::
-
自定义组合热键:导致t键单独无法使用
t & c::
-
按下F1键,执行鼠标左键双击
SC03B:: MouseClick,left,,,2 return
-
热键(含命令:keywait、pause/suspend、#if系列、hotkey、settimer)
-
热键(鼠标、操纵杆和键盘快捷键) - AutoHotkey 中文手册 - 文江博客
-
通过AutoHotkey定义常用快捷键
-
鼠标单击与移动
-
(3)鼠标单击与移动
-
按下鼠标中键:
MouseClick, Middle, , , , ,D,
-
鼠标滚动:
click wheelup 2
; 滚轮向上滚2次,数字省略则默认为1次,如click wheeldown
; 滚轮向下滚一次 -
click单击是相对于活动窗口,且无法设置鼠标移动速度;MouseClick相对于活动窗口,但可设置鼠标移动速度;DllCall相对于整个屏幕
-
相对(FoundX,,FoundY)移动(22,22),移动速度为1,移动后单击该位置:
MouseClick,,FoundX+22,FoundY+22,,1
-
相对与当前位置移动(50,30)后单击
MouseClick,,50,30,,1,,R
-
获取鼠标当前位置坐标:
-
相对于活动窗口:
MouseGetPos, xpos, ypos
-
若相当于整个屏幕,需要在上面代码之前加
CoordMode,Mouse,Screen
,将鼠标位置设置为相对与整个屏幕
-
-
★★★★相对于整个屏幕的鼠标移动
DllCall("SetCursorPos", "int", 100, "int", 400)
-
★★★鼠标移动到坐标200,100,移动速度为1『该方法移动坐标是相对与激活窗口的,所以如果点击后有弹窗,则移动位置会出错』:
MouseMove, 200, 100,1
-
鼠标相对当前位置移动:
MouseMove, 70, 264,0, R
-
释放鼠标右键
Click, Up Right
-
在指定坐标处点击鼠标右键
Click, 100 200 Right
-
移动鼠标光标到指定位置而不点击鼠标
Click, 100 200 0
-
在鼠标光标的当前位置点击鼠标左键
Click
-
鼠标光标要移动到的 X 和 Y 坐标后单击. 例如,
- 设置鼠标移动速度为1:
MouseClick,,190,407,,1
- 不可设置鼠标移动速度,且移动速度慢:
Click, 100 200
- 设置鼠标移动速度为1:
-
在鼠标光标的当前位置点击鼠标右键
Send,{RButton}
- 为何不起作用
Click, Right
-
按下鼠标左键不放
Click, Down
-
左键单击两次,即左键双击『详细参考鼠标单击
-
MouseClick,left,,,2
-
Click, 2
-
-
-
(2)定义脚本执行的快捷键:如
^
符号代表键盘的ctrl键,WIN的符号是#
,Alt 的符号是!
,Shift 的符号是+
,j代表字母j键,ctrl+j设置为热键『按下该热键后执行后续流程』:^j::
-
(1)AutoHotKey怎么编译成EXE文件,并修改文件图标『编译后图标不是添加的图标,可以利用Resource Hacker修改exe文件的图标』:AutoHotKey软件有一个工具Ahk2Exe.exe,这种工具可以把AutoHotKey脚本编译成EXE文件。Source选择ahk脚本文件,Destination为输出的exe文件。还可以通过Custom Icon设置EXE文件的图标。