DllCall 是 AHK 调用 Windows API 和 DLL 函数的入口。它很强,但新手不需要一开始就学复杂结构体和指针。先理解最小写法:调用哪个函数、传什么类型、传什么值、返回什么结果。
以下是基础的介绍,Ai对DllCall很熟悉,所以现在用Ai写调用Windows API才是最优的选择。
一、最小示例:调用系统提示框
#Requires AutoHotkey v1.1
#NoEnv
#SingleInstance Force
DllCall("MessageBox", "ptr", 0, "str", "你好,AHK66", "str", "DllCall 示例", "uint", 0)
return
这行代码调用了 Windows 的 MessageBox。AHK 自己有 MsgBox,这里不是为了替代它,而是用一个容易看懂的 API 演示 DllCall 的参数形式。
二、DllCall 的基本格式
result := DllCall("函数名", "参数类型1", 参数值1, "参数类型2", 参数值2, "返回类型")
很多 API 可以省略返回类型,但写复杂代码时建议查文档确认。常见类型有 int、uint、ptr、str。64 位系统里,句柄和指针通常用 ptr。
三、Beep:一个带返回值的例子
ok := DllCall("Beep", "uint", 750, "uint", 300)
MsgBox, % "返回值:" ok
Beep 的两个参数分别是频率和持续时间。返回非 0 通常表示调用成功,0 表示失败。具体含义要以对应 API 文档为准。
四、获取当前进程 ID
pid := DllCall("GetCurrentProcessId")
MsgBox, % "当前脚本进程 ID:" pid
这种无参数 API 很适合理解 DllCall。你只需要写函数名,就能拿到返回值。
五、字符串、整数、指针怎么选
| 类型 | 常见用途 |
|---|---|
| str | 字符串文本 |
| int | 有符号整数 |
| uint | 无符号整数、标志位 |
| ptr | 窗口句柄、内存指针、对象句柄 |
新手最容易错的是把窗口句柄写成 int。为了兼容 32/64 位,窗口句柄、进程句柄、内存地址优先用 ptr。
六、调用 DLL 里的函数
; 显式写 DLL 名
DllCall("user32\MessageBox", "ptr", 0, "str", "内容", "str", "标题", "uint", 0)
很多常用 API 在系统 DLL 里,比如 user32、kernel32、gdi32。函数名写法可以带 DLL 名,也可以在部分情况下省略。为了可读性,复杂脚本建议写清楚。
七、注意事项
- 先查 API 文档,确认参数数量、类型和返回值。
- 句柄和指针用
ptr。 - 不要随便调用不了解的系统函数。
- 复杂结构体要先学
VarSetCapacity、NumPut、NumGet。 - 能用 AHK 内置命令完成的任务,不必为了高级而硬上 DllCall。
DllCall 的入门目标不是背 API,而是看懂调用格式。先从 MessageBox、Beep、GetCurrentProcessId 这种小函数开始,再逐步学习结构体和回调。
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)