我正在尝试使用 AutoHotkey 读取 Windows CMD 的标准输出。例如,我想将set
AHK 中的控制台命令的输出存储在一个变量中。我已经在不久前实现了它,这让我更加困惑为什么它现在不起作用。在 AHK 论坛中,有一个关于CMDret
的相当老的帖子,这是一个基于 DLL 的功能,可以完全按照我的意愿行事。第一个问题是为它找到一个有效的下载,因为帖子中的所有链接都已失效。Google 给了我另一个站点,托管v3.1.2。尽管似乎有一个较新的(分别为v3.2.1和4d Beta),但我检查了它并测试了一个简单的示例:
msgbox % CMDret(COMSPEC " /C set")
CMDret(CMD)
{
VarSetCapacity(StrOut, 10000)
RetVal := DllCall("cmdret.dll\RunReturn", "str", CMD, "str", StrOut)
Return, %StrOut%
}
不幸的是,MsgBox 什么都没有。然后我检查了RetVal
哪个值为0;随附的自述文件说:
如果函数失败,则返回值为零。
再往下,它说:
注意:目前只有 32 位控制台应用程序可以使用这个 dll 版本的 CMDret(v3.1.2 或更低版本)。需要 command.com 的调用可能不会产生任何输出并且可能会崩溃。为了避免这种情况,我在下载文件中包含了一个名为“cmdstub.exe”的文件(在 Win9x 文件夹中)。当调用16 位 控制台应用程序以启用返回输出时,应使用此文件。
总之,我不确定问题是什么。我的机器在 64 位上运行。但是自述文件中的相应条款是否应该仅排除 16 位系统,还是仅包括 32 位系统?
如果计算架构可能不是问题,那可能是什么?
我正在寻找的是以下之一:
- 我可以解决问题并继续使用 v3.1.2 吗?
- 有没有人可以查看我可以查看的较新版本的工作源(甚至是本地副本)?
- 是否有另一种方法 [库、.ahk 代码等] 我可以用于我的目的?(最好类似,因为 CMDret 看起来很简单)