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 可以省略返回类型,但写复杂代码时建议查文档确认。常见类型有 intuintptrstr。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
  • 不要随便调用不了解的系统函数。
  • 复杂结构体要先学 VarSetCapacityNumPutNumGet
  • 能用 AHK 内置命令完成的任务,不必为了高级而硬上 DllCall。

DllCall 的入门目标不是背 API,而是看懂调用格式。先从 MessageBox、Beep、GetCurrentProcessId 这种小函数开始,再逐步学习结构体和回调。

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。