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

本文档介绍了AutoHotkey(AHK)的基本使用,包括下载资源、脚本编辑器推荐、宏命令、快捷键设定、AHK GUI布局、JSON解析、SendLevel控制等。还分享了特殊键解决方案、动态添加热键、AHK与GUI交互、数组操作、正则表达式、剪切板功能、网络下载等内容,适合AHK初学者和进阶开发者参考。
摘要由CSDN通过智能技术生成

? ? ? ?

我的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

 

快捷键

Symbol Description
# 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.responseBody
    pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
    length := arr.MaxIndex() + 1
    text := 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.ahk

jsonstr := "{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",,, pid
  WinWait, 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|Path


MyListView:
if (A_GuiEvent = "Normal") {
  MsgBox, %A_EventInfo%
}

if (A_GuiEvent = "RightClick") {
  MsgBox, %A_EventInfo%
}
return

 

 

 

GUI的关闭事件

GuiEscape:
GuiClose:
    Gui, Hide
return
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值