Autohotkey window 下宏键盘、宏命令开发入门

article/2025/9/14 4:47:13

? ? ? ?

我的AHK下载地址:https://github.com/dragon8github/Pandora/raw/master/pandora.exe

AutoHotKey 下载:https://autohotkey.com/download/

国内自制的ahk网站:https://www.autoahk.com/

推荐下载installer

 

官方网站:https://www.autohotkey.com/docs/AutoHotkey.htm

中文官网:https://wyagd001.github.io/zh-cn/docs/Tutorial.htm

AHK脚本编辑器推荐:http://fincs.ahk4.net/scite4ahk/  |  https://wyagd001.github.io/zh-cn/docs/commands/Edit.htm#Editors

个人推荐使用sublime text作为autohotkey的编辑器,只需要安装aotuhotkey插件即可。

 

常量列表,十分实用:https://wyagd001.github.io/zh-cn/docs/Variables.htm#DD

优秀的脚本合集:https://www.autoahk.com/archives/1444

特殊键解决方案(实用):https://blog.csdn.net/liuyukuan/article/details/5924137   https://wyagd001.github.io/zh-cn/docs/KeyList.htm#SpecialKeys

GUI的一些布局API:https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm#PosSize

使用html做ahk界面:https://blog.csdn.net/liuyukuan/article/details/53504400

 

(重要)使用SciTE4AutoHotkey,出现中文怪异的问题。

 左上角File--Encoding---UTF-8 with BOM

 

1、代码加入 #InstallKeybdHook,并且开启脚本

2、左键点击右下角的图标 -> View -> Key History

将ahk编译成exe:http://ahkcn.sourceforge.net/docs/Scripts.htm#ahk2exe

 

快捷键

SymbolDescription
#Win (Windows logo key)
!Alt
^Control / Ctrl
+Shift
&An ampersand may be used between any two keys or mouse buttons to combine them into a custom hotkey. 

默认是左侧的,如果想要右侧的加入< >即可,譬如按下右侧的ctrl , 那就是 >^

更多热键请参考:

(重要,推荐)https://autohotkey.com/docs/Hotkeys.htm

https://autohotkey.com/docs/Hotkeys.htm

https://autohotkey.com/docs/commands/Send.htm

 

动态添加热键

__TIP__(a = 123) {MsgBox, % a
}!z::HFN := Func("__TIP__")Hotstring(":*:fuck", HFN.bind("321"))
return

 

 

GET请求,解决乱码问题

; 下载内容
ajax(url, q:=false, text:="正在为你下载代码,请保持网络顺畅")
{whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")whr.Open("GET", url, true)whr.SetRequestHeader("Content-Type", "charset=GB2312")whr.Send()whr.WaitForResponse()if (q==false) {if (whr.ResponseText) {tip("下载成功")} else {tip("无内容返回")}}arr := whr.responseBodypData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)length := arr.MaxIndex() + 1text := StrGet(pData, length, "utf-8")return text; return  whr.ResponseText
}

 

AHK 解析JSON库

https://github.com/cocobelgica/AutoHotkey-JSON

#Include src/JSON.ahk              ; JSON Script!z::
str =
(
{"a": 123
}
)data := JSON.Load(str)MsgBox, % data.a
return

 

注意索引是从1开始的。所以如果是数组,第一个的索引是1

!z::
json_str := ajax("https://gitee.com/api/v5/gists?access_token=6ab92e291bbe59b4301191b6aef2bc85&page=1&per_page=20")data := JSON.Load(json_str)MsgBox, % data[1].url
return

 

 

AHK 解析和使用JSON,依赖 ActiveScript.ahk

https://github.com/Lexikos/ActiveScript.ahk

#Include src/ActiveScript.ahkjsonstr := "{a: 123}"jsonParse =
(
eval('(' + jsonstr + ')')
)script := new ActiveScript("JScript")
Result := script.Eval(jscontent)
MsgBox, % Result.a

 

 

AHK GUI 布局工具  SmartGUI Creator

https://wyagd001.github.io/zh-cn/docs/commands/Gui.htm#Position

 

两个关于索引的重要认知:

1、SubStr 字符串截取,如果你想从后面开始取,那么索引应该设置为0,比如SubStr("123", 0, 1);

2、数组的第一位,是从1开始的。恶心吧?

 

获取按钮的状态

; 左键是否按紧了
KeyIsDown := GetKeyState("LButton")

KeyIsDown := GetKeyState("Alt")

KeyIsDown := GetKeyState("Ctrl")

 

powershell.exe 与 ahk结合

!z::
; zip名字
zipname := "vue3-template.zip"
; 文件夹名字
zippath := "./vue3-template"
; 下载文件的地址
url := "https://raw.githubusercontent.com/dragon8github/Pandora/master/template/vue3-template.zip"
; 由于要使用git命令,所以要将window格式转化为unix格式的路径
desk := StrReplace(A_Desktop, "\", "/")
; 文件夹的名字
name := desk . "/vue3_template_" . A_YYYY . A_MM . A_DD . A_Hour . A_Min . A_Sec
; 一系列命令 
command = 
(
mkdir %name% ; cd %name% ; Invoke-WebRequest -uri "%url%" -OutFile "%zipname%" ; Expand-Archive -Path %zipname% -DestinationPath . ; rm %zipname%
)
run, powershell.exe %command%
return

 

 

 

热字符串定义一个很重要的技巧:

::.f::
Var =
(
.forEach((val, key) => {})
)
code(Var)
return::f::
Var =
(
function () {}
)
code(Var)
return

我定义了.f 和 f ,但如果我输出 a.f , 我期待触发 .f , 但实际上是除非 f

其实这样这样设置 .f即可。 :?:.f::

:?:.f:: 
Var =
(
.forEach((val, key) => {})
)
code(Var)
return

 

 

关闭进程,其实特别实用

https://wyagd001.github.io/zh-cn/docs/commands/Process.htm#ex1

Run notepad.exe,,, NewPID
Process, Priority, %NewPID%, High
MsgBox The newly launched Notepad's PID is %NewPID%.

 

 全局变量global,居然只能这样使用?

txtit() {; 全局变量真的只能这样用了,定义在外面没有办法生存。global pidary := pidary ? pidary : []pidary.push("110")return
}!x::
txtit()
txtit()
txtit()
MsgBox, % pidary.Length()
return

 

 

 

强大的 Spy 探测检测窗口的信息。

只需要右键小图标,选中 spy window 即可,最好选中右上角的 Follow Mouse 方便选中。我们来实战一下如何查看搜狗输入法的窗口

我们得知输入法的窗口信息为: ‘ahk_class SoPY_Comp’。这样我就能搞很多事情了。

    if (WinExist("ahk_class SoPY_Comp")) {MsgBox, 123}

后记:win10的输入法有问题,就算能获取,Send的时候也很多问题。最大的问题在于哪怕出现输入法了,还是会在UI中输出英文,最好的办法还是使用搜狗等第三方吧。

建议屏蔽win10输入法:https://jingyan.baidu.com/article/ed2a5d1f99277909f7be1753.html

 

 

 

  Run,% "C:\Windows\notepad.exe",,, pidWinWait, ahk_pid %pid%WinMove, ahk_pid %pid%,,  0, 0, (A_ScreenWidth)/3, (A_ScreenHeight)Return

 

 

listview 点击事件(click,rightclick)

必须设置AltSubmit参数才行。

Gui, ISearch:Add, ListView, r7 w800 h600 gMyListView AltSubmit xs yp+40, Name|PathMyListView:
if (A_GuiEvent = "Normal") {MsgBox, %A_EventInfo%
}if (A_GuiEvent = "RightClick") {MsgBox, %A_EventInfo%
}
return

 

 

 

GUI的关闭事件

GuiEscape:
GuiClose:Gui, Hide

http://chatgpt.dhexx.cn/article/ZS8JgyOr.shtml

相关文章

【开源项目分享】GitHub中文排行榜 - 帮助你发现高分优秀中文项目-Java

榜单设立目的 &#x1f1e8;&#x1f1f3; GitHub中文排行榜&#xff0c;帮助你发现高分优秀中文项目&#xff1b;各位开发者伙伴可以更高效地吸收国人的优秀经验、成果&#xff1b;中文项目只能满足阶段性的需求&#xff0c;想要有进一步提升&#xff0c;还请多花时间学习高分…

HTML+CSS+JS+Servlet+MSQL搭建个人博客

3.应用技术&#xff1a;HTMLCSSJSJSPServletMSQL 前端后台管理。 4.开发环境&#xff1a;eclipsejdk1.8tomcat8.5 mysql5.7前端Layui。 二、前端 1.博客首页 博主和用户可以访问到博客系统的首页&#xff0c;首页内容主要包括导航条&#xff0c;文章推荐和登录注册管理模块…

用 Dev-C++ 编写简单的走迷宫小游戏

用 Dev-C 编写简单的走迷宫小游戏 前言基础版优化版 前言 以下是显示效果 B站视频讲解&#xff1a;【小游戏】用 Dev-C 编写简单的控制台走迷宫小游戏 【小游戏】用 Dev-C 编写简单的控制台走迷宫小游戏 基础版 用 # 代表墙 用 空格 代表空地 用 O 代表玩家 地图存储&#…

简单的迷宫问题(DFS/BFS分别求解)

简单的迷宫问题 题目描述输入样例输出样例 dfs解题思路(深搜)路线规划DFS特点C源码(DFS) bfs解题思路(广搜)路线规划测试代码段BFS特点C源码&#xff08;BFS&#xff09; 题目描述 现在需要你来规划一条路线&#xff0c;从起点到终点的最短路线。 给你一个nm的地图&#xff08;…

基于JAVA的简单迷宫游戏

一、实验要求 1. 迷宫游戏是非常经典的游戏&#xff0c;在该题中要求随机生成一个迷宫&#xff0c;并求解迷宫。 2. 要求游戏支持玩家走迷宫&#xff0c;和系统走迷宫路径两种模式。玩家走迷宫&#xff0c;通过键盘方向键控制&#xff0c;并在行走路径上留下痕迹&#xff1b;系…

C++实现简单的走迷宫

c实现简单走迷宫 用n*n个小方格代表迷宫&#xff0c;每个方格上有一个字符0或1&#xff0c;0代表这个格子不能走&#xff0c;1代表这个格子可以走。只能一个格子一个走&#xff0c;而且只能从一个格子向它的上、下、左、右四个方向走&#xff0c;且不能重复。迷宫的入口和出口分…

迷宫问题(简单模拟)

目录导航 图解体会领悟&#xff1a;代码实现&#xff08;Java&#xff09;&#xff1a;C语言版C版 为了复习递归&#xff0c;而模拟学习的。所以迷宫不大&#xff0c;总体是8行7列。 图解 A为起点&#xff0c;B为终点。 如下图在A和B之间设置挡板被隔绝之后&#xff0c;结果如…

超级简单的迷宫代码 初学者程序

迷宫 走迷宫一种比较有趣&#xff0c;操作简单的小游戏。 #include<stdio.h> #include<getch.h> #include<stdlib.h> #include<time.h> int main(int argc,const char*argv[]) {//构造迷宫地图char maze[10][10]{{#,#,#,#,#,#,#,#,#,#},{#,,#,#,#,#…

最简单的迷宫求解

在计算机中&#xff0c;我们可以把迷宫当做一个二维数组。其中0表示通路&#xff0c;1表示墙。 我们以下图为例&#xff0c;对于只有一条通路的简单迷宫进行求解 该迷宫存储在“Map.txt”文档中。 对于该迷宫&#xff0c;我们首先将入口点压入栈中&#xff0c;然后通过对该点…

JAVA 中实现的简单的迷宫小游戏

多的不说&#xff0c;直接上代码&#xff0c;就是一个简单的迷宫小游戏。 import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Random; import java.util.Stack; import javax.swing.JFr…

Python实现迷宫游戏

项目&#xff1a;迷宫游戏 摘要1.引言1.1研究的背景及意义1.2研究的内容 2.系统结构2.1系统的结构2.2基本思路 3.实现代码3.1Maze类3.2Player类3.3Controller类3.4主函数 4.实验5.总结和展望参考文献 摘要 本次实验设计了一款迷宫小游戏&#xff0c;采用用Python开发技术实现。…

C语言实现简单迷宫

C语言实现迷宫程序 前言 大家小时候一定都玩过迷宫这个游戏&#xff0c;很吸引人吧&#xff0c;有那种走不出来就不罢休的执着&#xff0c;然后走出来了觉得自己很强&#xff0c;自己可以了&#xff0c;接着激动的开始下一个关卡&#xff0c;慢慢的沉溺在迷宫的世界里了。 然…

如何使用C语言实现简单迷宫(递归和非递归实现 含图例)

1.非递归实现 简单迷宫&#xff1a;只有一条通路的迷宫 思路&#xff1a;在找迷宫通路的时候&#xff0c;我们往往是在给定入口(入口合法且为通路)的情况下&#xff0c;沿着入口的某个方向走&#xff08;此方向是通路&#xff09;。现给定走迷宫的方向&#xff1a;上、左、右…

简单迷宫(递归)

代码思路 1.创建二位数组作为迷宫 2.数字1为墙壁&#xff0c;2为经过的位置&#xff0c;3为死路&#xff0c;0为未探寻的位置 3,定义一个起点和终点&#xff0c;运用递归的方法&#xff0c;按照自己设计的寻找方向的优先级运行&#xff0c;直到让终点值为2则返回true&#x…

简单迷宫问题

简单迷宫问题 一、问题描述二、数据组织三、算法说明附录&#xff1a;完整代码 #简单迷宫问题 一、问题描述 给定一个MN得迷宫&#xff0c;求一条从指定入口到出口得迷宫路径。假设一个迷宫如图1所示&#xff0c;&#xff08;这里MN8)&#xff0c;其中每个方块用空白表示通道…

maven生命周期lifecycle和plugins介绍

一、Maven的生命周期 生命周期的定义&#xff1a;Maven的生命周期就是为了对所有的构建过程进行抽象和统一。在大量项目的构建过程中&#xff0c;Maven总结出了一套高度完善的&#xff0c;易于扩展的生命周期&#xff0c;包括项目的清理&#xff0c;初始化&#xff0c;编译&am…

【Maven】IDEA中Maven生命周期

Maven生命周期&#xff08;lifecycle&#xff09;由各个阶段组成&#xff0c;每个阶段由Maven的插件plugin来执行完成。 生命周期&#xff08;lifecycle&#xff09;主要包括clean、resources、complie、install、pacakge、testResources、testCompile、deploy等&#xff0c;其…

Maven生命周期与插件

竟无语凝噎 文章目录 前言一、生命周期二、插件总结 前言 maven原来有这么多道道 一、生命周期 Maven对项目构建的生命周期划分为三套 clean&#xff1a;清理工作 default&#xff1a;核心工作&#xff0c;例如编译&#xff0c;测试&#xff0c;打包&#xff0c;部署等 si…

Maven 生命周期详解

思考&#xff1a;我们常使用的maven命令&#xff0c;比如 mvn clean install&#xff0c;mvn clean package 这些命令到底最后是如何工作的&#xff1f; 在这里我们还是先一步步来&#xff0c;其实它们运行的是生命周期中对应的phase阶段。 Maven 拥有三套独立的生命周期&…