AutoHotKey-study
目录
- 使用编辑器
- 脚本注意
- 函数解释
- 信息调试方法
- 键盘获取方法
- 脚本练习
最近发现常用键盘的上下左右箭头去操作输入输出问题感觉很不是滋味,不像Linux那样,有vim的使用,就想着有没有什么方法更快捷,更方便的去使用电脑键盘,稍微搜索了一番,发现了这个强大的脚本工具 autohotkey
ahk帮助文档
使用编辑器
adventure:
是autoahk编辑器的升级
快捷键:
注释:ctrl + q
复制一行:ctrl + ⬇
#SingleInstance:
确定脚本已在运行时是否允许再次运行.
~
添加这个符号后,激发热键时, 不会屏蔽(被操作系统隐藏) 热键中按键原有的功能。
SetTitleMatchMode :定义wintitle的的模式
1: 默认行为. 窗口标题必须以指定的 WinTitle 开头才能匹配.
2: 窗口标题的任意位置包含 WinTitle 才能匹配.
3: 窗口标题必须和 WinTitle 完全一致才能匹配.
脚本注意
-
跳过对话框, 自动替换旧实例.
#SingleInstance force #NoEnv ;启用环境变量 -
热字串:使用空白时还会出现
O,(omit)表示忽略终止符,即不需要使用空白终止符;
R,原样输出;
C,区分大小写;
b0,不会删除原字符:*b0:<font>::
</font>{left 8}{Space}color{space}={space}`“`”{Right}
#<font color = ""></font> -
Send:- 只有一行代码时,v1和v2都可以简写
- 在v2使用{}包含多行代码,在v1版本只需用return返回即可
- 在v2中的send需用双引号包裹,为字符串,在v1中不需要双引号包裹
当使用热键输出文本时,会遇到如下情况
v1:按下a键忽略a的输出
v2:按下a键在a后循环输出
按下b时,出现对应的内容
综上:使用a:: { send "baceh" } $b:: send "bcbbd"$可以将字符串原内容输出
-
禁用按键
>#:: return ;禁用 → win键 hotkey, a, 标签 hotkey, a, off return 标签:msgbox, a return -
autohotkey有宏录制功能

-
脚本流程中,多次创建同一个热键,热键功能指向最后一次代码运行的指向标签,最终执行为3
hotkey, a, 标签1 hotkey, a, 标签2 hotkey, a, 标签3 return 标签1:msgbox, 1 return 标签2:msgbox, 2 return 标签3:msgbox, 3 return -
热键嵌套
; 按下a/b/c任意一个键,输出l a:: | a:: b:: | b:: c::send, l | c:: ; %A_ThisHotkey% 保存了本次按下的热键| send l| return -
添加钩子,防止热键冲突
; 加钩子前 直接输出lll 1::send, a a::msgbox, lll; 加钩子后 不会发生冲突 1::send, a $a::msgbox, lll
函数解释
-
Click [ Options ]
Options:Coords, WhichButton, ClickCount, DownOrUp 和/或 Relative. 如果省略所有项目, 在鼠标光标的当前位置执行单次左键点击.Coords:如果省略, 则使用鼠标的当前位置. 否则, 请指定在点击前, 鼠标光标要移动到的 X 和 Y 坐标. 例如, Click “100 200” 在特定位置点击鼠标左键. 坐标相对于活动窗口的客户端区域, 除非曾使用 CoordMode 更改了这个设置. 如果省略, 则使用光标的当前位置.CoordMode "ToolTip", "Screen"WhichButton:默认为 Left. 可指定 Left, Right, Middle(或只是这些名称的首字母); X1(第四个按钮) 或 X2(第五个按钮). 例如, Click “Right”Relative:相对当前鼠标位置 -
inf := InputBox([Prompt, Title, Options, Default]):输入对话框Prompt:提示文本
Title:标题
Options:类型,eg:Password
inf.value(获取对象输入的文本)
inf.result(获取对象输入框的返回值),输入框是如何关闭的: OK, Cancel 或 Timeout. -
KeyWait, KeyName [, Options]:等待按键的状态
Options:
为空,表示无限期等待;
D: 等待按键被按下
T: 超时(例如 T3). 超时前等待的秒数, 超时后设置 ErrorLevel 为 1. -
Run, Target [, WorkingDir, Options, OutputVarPID]
RunWait, Target [, WorkingDir, Options, OutputVarPID]
Options:
省略, 命令正常运行 Target, 并且当 Target 不能启动时显示警告对话框.
Max: 最大化运行
Min: 最小化运行
Hide: 隐藏运行(不能和上面任意一个选项组合使用) -
Winset(对指定的窗口进行各种设置)
内容太长,其帮助文档传送 -
SetKeyDelay:设置每次Send系列的延迟
信息调试方法
- msgbox
- listvars
- outputdebug
键盘获取方法
-
双击/open脚本
-
view – key history and script info
SC:键盘的Scan Code
VK:键盘的Virtual Key
-
使用PrintScreen键盘输出内容12345
SC137::Send 12345 VK2c::Send 12345
脚本练习
-
click命令
#SingleInstance Force CoordMode "Mouse","Screen"f1:: { Click 1919,716,0 Click 1879,20 Sleep 3000 Click 1622,161 Sleep 1000 Click 1616,78 } -
send,合并单元格
#SingleInstance Force CoordMode "Mouse","Screen"; 拆分单元格 f1:: {send "{alt}"send "h"Sleep "200"send "m"Sleep "200"send "u" } -
允许用户输入电话号码.
IB := InputBox("Please enter a phone number.", "Phone Number", "w640 h480") if IB.Result = "Cancel"MsgBox "You entered '" IB.Value "' but then cancelled." elseMsgBox "You entered '" IB.Value "'." -
鼠标在最上面改变音量
#SingleInstance Force CoordMode "Mouse","Screen";MouseGetPos &x, &y ;w:: ;{ ;获取坐标位置 ;MouseGetPos &xpos, &ypos ;MsgBox "The cursor is at X" xpos " Y" ypos ;}~WheelUp::{MouseGetPos &x, &yif (y==0){Send "{Volume_Up}"} } ~WheelDown::{MouseGetPos &x, &yif (y==0){Send "{Volume_Down}"} } -
关闭视窗
#SingleInstance Force ;CoordMode "Mouse","Screen";使用ctrl alt f4关闭所有相同视窗 ^!f4::; 视窗存进 sClassWinGetClass, sClass, A; 关闭相同的类视窗while WinExist("ahk_class " . sClass) {WinClose} return;使用鼠标左键和esc关闭当前窗口 ~LButton & Escape::WinGetActiveTitle ,titleWinclose %title% return#n:: run notepad -
音量控制
!NumpadAdd:: Send {Volume_Up} ;//Alt + numpad plus !NumpadSub:: Send {Volume_Down} ;//Alt + numpad minus !Numpad0::Send {Volume_Mute} ;//Alt + numpad 0 -
语音报告今日时间
!F2::date = %A_YYYY%年%A_MM%月%A_DD%日Speak("今天日期是 " . date)time = %A_Hour%点 %A_Min%分 %A_Sec%秒Speak("现在时间是 " . time)returnSpeak(say) {spovice:=ComObjCreate("sapi.spvoice")spovice.Speak(say) } -
获取当前鼠标颜色
!a::MouseGetPos, MouseX, MouseYPixelGetColor, color, %MouseX%, %MouseY%, RGB Clipboard := "#" . SubStr(color, 3) ;color = 0x...... MsgBox, Current color is `n %Clipboard%return -
按下鼠标中轮回到上层目录,在推特切下一个推文
~MButton::WinGetClass,sClass,A;//MsgBox class=%sClass%;//FM=7-zip window, TFcFormMain=FreeCommanderif (sClass="TFcFormMain" || sClass="FM" || sClass="MultiCommander MainWnd") {Send, {BS}} else if (sClass="CabinetWClass") {Send, !{up} ; 回向上一层目录} else if (sClass="MozillaWindowClass" || sClass="Chrome_WidgetWin_1") {WinGetTitle, sTitle, A;//MsgBox title=%sTitle%if (InStr(sTitle, "Gmail") > 0) {Send {j}} else if (InStr(sTitle, "Twitter") > 0) {Send {j} ; 下一个推特}} return -
连续按2次Esc关闭当前视窗
~Esc:: Keywait, Escape, , t0.5 ; KeyWait读取键盘输入,如果0.5秒内不是按Escape则结束 if errorlevel = 1return elseKeywait, Escape, d, t0.1if errorlevel = 0 ; 0.5秒内按了Escape,则再读第二个按键,若为Escape则关闭视窗{WinGetActiveTitle, TitleWinClose, %Title%return}return ;若第二个按键不为Escape则结束 -
批量删除视窗
#SingleInstance Force SetTitleMatchMode 2 ; 设置wintitle的匹配模式#n::run notepadReturn^!f4::WinGetTitle sTitle, A; MsgBox %sTitle%; InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]InputBox sTitle, 视窗标题, 输入视窗标题名, , 300, 150, , , , , %sTitle%if (sTitle = "nb") {sTitle := "记事本" ;; 或 sTitle = 记事本} else if (sTitle = "ie") {sTitle := "Internet Explorer"}while WinExist(sTitle)WinCloseReturn -
clipboard剪切功能
^+g::current_clipboard = %Clipboard% ;把当前剪切板内容存储起来,剪切内容为文本send ^c ; 复制字符串存入剪切板Clipwait,1 ; 等待剪切板包含数据Run http://www.google.com/search?h1=zh&q=%Clipboard%Clipboard = %current_clipboard% ; 将剪切板内容恢复 -
截图工具的使用

!4::run,"%A_WinDir%\system32\Snippingtool.exe"sleep ,500WinActive, "Snipping Tool"send ,!msend ,r ; 矩形截图;send f ; 任意截图return#Persistent RunWait, %ComSpec% /c dir C:\ >>C:\DirTest.txt, , Min ; 程序运行结束后才向下运行 ComSpec,为cmd Run, C:\DirTest.txt Run, properties C:\DirTest.txt -
对当前窗口的操作
https://autohotkey.top/zh-cn/docs/commands/WinSet.htm#Examples -
设计开关
- 按下一个按键启动,在按一次停止
; 单击a,连续点鼠标左键,再次单击,取消点击a::settimer, 循环a功能标签, % (开关变量 := !开关变量) ? 1 : "off" 循环a功能标签:send, {Lbutton} returnF1:: if (onoff := !onoff)MsgBox, 布尔值为%onoff%`n第一次开elseMsgBox, 布尔值为%onoff%`n第二次关 Return - 分离式开关设计
F1::F1onoff := !F1onoff, F2onoff=0SetTimer F2循环, OffSetTimer F1循环, % F1onoff=0 ? "Off" : 50ToolTip return F2::F2onoff := !F2onoff, F1onoff=0SetTimer F1循环, OffSetTimer F2循环, % F2onoff=0 ? "Off" : 50ToolTip return F1循环:ToolTip F1循环%F1onoff% return F2循环:ToolTip F2循环%F2onoff% return
- 按下一个按键启动,在按一次停止
-
设计markdown文档快速标题
^1:: ^2:: ^3:: ^5:: ^6::numHashes := Substr(A_Thishotkey, 2) ; "^1" -> "1"Markdown_title(numHashes)returnMarkdown_title(numHashes){Clipboard := ""sendInput {home}sendInput {SHIFT}+{End}sleep 200Clipwait ,1 ; 等待剪切板包含数据text := Clipboardtext := RegExReolace(text, "^#{1,6}\s(.*)", "$1")SendInput {del}SendInput {home}{# numHashes}{End} } -
常用热键整理
https://www.autoahk.com/archives/36311#H2-12 -
微知识点整理
https://www.autoahk.com/archives/9195
参考:
基础到精通
文档
相关文章:
AutoHotKey-study
目录 使用编辑器脚本注意函数解释信息调试方法键盘获取方法脚本练习 最近发现常用键盘的上下左右箭头去操作输入输出问题感觉很不是滋味,不像Linux那样,有vim的使用,就想着有没有什么方法更快捷,更方便的去使用电脑键盘࿰…...
Go to do list
go 语言中怎么实现分布式系统? 在Go语言中实现分布式系统需要考虑以下几个方面: 通信协议:在分布式系统中,各个节点需要通过网络进行通信。Go语言提供了丰富的网络编程库,如net/http、net/rpc等,可以方便…...
JWT 认证机制
1. Session 认证的局限性 Session 认证机制需要配合 Cookie 才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端按口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。 注意: 1…...
内核启动时间信息打印
文章目录 一 串口打印1 借助串口助手2 dmesg自带时间3 内核显示时间信息4 借助initcall_debug二 图形花显示1 bootgraph工具使用2 Bootchart工具使用3 Grabserial工具使用一 串口打印 1 借助串口助手 2 dmesg自带时间 root@xboard:~# dmesg [ 0.000000] Booting Linux on …...
Web端专业级H264/H265 直播流播放器实现-JessibucaPro播放器
概况 这个主要是参加“深圳 liveVideoStack” 的ppt的文字版的分享。 深圳 liveVideoStack 讲师介绍 关于Jessibuca 官网地址:jessibuca.comDemo: DemoDoc:DocGithub地址:Github 关于JessibucaPro 地址:JessibucaProDemo: …...
macOS sandbox 文件夹授权
macOS sandbox 文件夹授权 macOS如果想上苹果市场发布的话,那么必须要遵守苹果的沙盒协议,这样应用的存储默认都是沙盒路径,隔离了用户的文件系统,那么这个时候我需要访问 /User/xxx/Library/Developer/ 这种文件夹的时候,直接访问是会被拒绝的,那既然这样就肯定要授权了…...
CentOS 7安装Java 8
前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 要在CentOS 7上安装Java 8,请按照以下步骤操作: 打开终端并以root身份登录。 更新系统软件包: …...
施密特正交
描述 给出一个向量组原始基,通过施密特正交化、单位化,构造出标准正交基。 输入 本题有多组测试数据。每组测试数据在第一行给出两个正整数t,n,表示有t个n维向量。随后t行每行给出n个实数表示一个向量。 输出 每行输出一个向量…...
视频号小店怎么起量?实操详解!
我是电商珠珠 视频号小店于22年由视频号团队发展起来,跟抖音小店一样,都是电商平台。 目前对于视频号小店来说,正是风口期,就像19年的抖音小店一样,月入5w是没一点问题的。 去年的视频号小店还没有掀起多大的波浪&a…...
如何将unity项目托管到github(快速便捷)
如何将unity项目托管到github(快速便捷) 文章目录 如何将unity项目托管到github(快速便捷)前置准备Gitgithubgit-lfs 具体操作1.配置.gitignore文件2.配置.gitattributes3.使用git 前置准备 Git github git-lfs 这些内容省略&…...
ClickHouse(16)ClickHouse日志引擎Log详细解析
日志引擎系列 这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。 这系列的引擎有: StripeLogLogTinyLog 共同属性 引擎: 数据存储在磁盘上。 写入时将数据追加在文件末尾。 不支持突变操作,也就是更新…...
opencv项目开发实战--填补字母的空白
目录 完成/填写字母 OpenCV C++ 完成opencv表中缺失的行 如何使用 OpenCV 获取图像中所有文本的位置? 完成/填写字母 OpenCV C++ 解决方案一: 您似乎已经对图像进行了...
Wnmp本地搭建结合内网穿透实现远程访问本地Wnmp服务
文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂&a…...
C++ 红黑树的封装
一.map/set的封装 在实现了红黑树的部分功能后,我们可以便可以将红黑树作为底层结构来封装map 和 set ,但是问题也随之而来。我们都知道map是k-v的数据模型,而set是k的数据模型,我们难道要去使用两棵红黑树来封装吗?显…...
MongoDB快速入门及其SpringBoot实战
MongoDB快速入门及其SpringBoot实战 MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展&am…...
Python网络爬虫练习
爬取历年中国大学排名(前20名),并随机选取一所高校画图展示其历年总分变化,并计算平均分,在图上展示该平均分直线: 代码如下: import matplotlib.pyplot as plt import pandas as pd import requests import randomdef main(yea…...
《opencv实用探索·九》中值滤波简单理解
1、引言 均值滤波、方框滤波、高斯滤波,都是线性滤波方式。由于线性滤波的结果是所有像素值的线性组合,因此含有噪声的像素也会被考虑进去,噪声不会被消除,而是以更柔和的方式存在。这时使用非线性滤波效果可能会更好。中值滤波是…...
PC行内编辑
点击编辑,行内编辑输入框出现,给列表的每条数据定义编辑标记,最后一定记得 v-model双向绑定,使数据回显。 步骤: 1、给行数据定义编辑标记 2、点击行编辑标记(isedit) 3、插槽根据标记渲染表单 …...
鸿蒙开发:Stage模型开发-应用/组件级配置以及UIAbility组件初步使用【鸿蒙专栏-20】
文章目录 Stage模型开发概述基本概念UIAbility组件和ExtensionAbility组件WindowStageContextAbilityStage开发流程应用组件开发了解进程模型了解线程模型应用配置文件应用版本声明配置Module支持的设备类型配置Module权限配置进阶应用配置...
Django回顾【五】
目录 一、多表操作 【1】基于对象的跨表查 【2】基于双下滑线的连表查 【3】related_name 二、聚合查询与分组查询 【1】聚合查询 【2】分组查询 三、F与Q查询 【1】F查询 【2】Q查询 四、其他字段和字段参数 【1】其他字段 【2】ORM字段参数 【3】ForeignKey 属…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
