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 属…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
