使用 AutoHotkey 捕获 CMD 输出

MCL*_*MCL 7 cmd autohotkey

我正在尝试使用 AutoHotkey 读取 Windows CMD 的标准输出。例如,我想将setAHK 内的控制台命令的输出存储在变量中。我不久前已经实现了它,这让我更加困惑为什么它现在不起作用。
在 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%
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,MsgBox 中什么也没有包含。然后我检查了RetVal哪个值为0;随附的自述文件说:

如果函数失败,返回值为零。

再往下写着:

注意:当前只有 32 位控制台应用程序可以使用此 dll 版本的 CMDret(v3.1.2 或更低版本)。需要 command.com 的调用可能不会产生任何输出,并且可能会崩溃。为了避免这种情况,我在下载中包含了一个名为“cmdstub.exe”的文件(在 Win9x 文件夹中)。当调用16 位控制台应用程序以启用返回输出时,应使用此文件 。

总之,我不确定问题是什么。我的机器运行在 64 位上。但自述文件中的相应条款是否应该仅排除 16 位系统,还是仅包括 32 位系统?
如果计算架构可能不是问题所在,那么问题可能是什么?

我正在寻找的是以下之一:

  1. 我可以修复该问题并继续使用 v3.1.2 吗?
  2. 有没有人有我可以查看的新版本的工作源(甚至是本地副本)?
  3. 我可以使用另一种方法[库、.ahk 代码等]来实现我的目的吗?(最好类似,因为 CMDret 看起来很简单)

小智 0

我找到了适用于 AutoHotKey L 64 位的仅脚本解决方案: http://www.autohotkey.com/board/topic/67687-ahkahk-lusing-wsh-to-interact-with-command-line-progs/

经过一番尝试后,我能够捕获我使用 DOS Type 命令列出的 40k 文本文件的整个输出。有一个演示展示了如何与 time 命令交互,如果您需要与 dos 命令或批处理脚本进行有限的双向交互,那么这是很好的选择。