【发布时间】:2021-09-28 03:12:43
【问题描述】:
我正在尝试使用 AutoHotkey 读取 Windows CMD 的标准输出。例如,我想将 AHK 中 setconsole 命令的输出存储在一个变量中。我已经在不久前实现了它,这让我更加困惑为什么它现在不起作用。
在 AHK 论坛中,有一个关于 CMDret 的相当 old thread,这是一个基于 DLL 的功能,可以完全按照我的意愿行事。第一个问题是为它找到一个有效的下载,因为帖子中的所有链接都已失效。 Google 给了我another site,托管 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 看起来很简单)
【问题讨论】:
-
嘿! ;) 你还需要答案吗?,我只是浏览了一下,我发现了这个问题,它可以完全在 ahk 中完成,我会尽可能发布答案......我目前正在旅行......跨度>
标签: cmd autohotkey