Я пытаюсь прочитать стандартный вывод Windows CMD с помощью AutoHotkey. Например, я хотел бы, чтобы вывод команды set
console внутри 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; а в прилагаемом файле readme говорится:
Если функция не работает, возвращаемое значение равно нулю.
Ниже написано:
Примечание. только 32-битные консольные приложения в настоящее время будут работать с этой версией DLL CMDret (v3.1.2 или ниже). Вызовы, для которых требуется command.com, скорее всего, не выдадут никаких результатов и могут привести к сбою. Чтобы избежать этого, я включил в загрузку файл с именем «cmdstub.exe» (в папке Win9x). Этот файл следует использовать при вызове 16-битных консольных приложений, чтобы разрешить возврат вывода.
В заключение, я не уверен, в чем проблема. Моя машина работает на 64-битной версии. Но должен ли соответствующий пункт в файле readme исключать исключительно 16-битные системы или он включает только 32-битные?
Если вычислительная архитектура, вероятно, не является проблемой, то что может быть?
Я ищу одно из следующих:
- Могу ли я решить проблему и продолжать использовать v3.1.2?
- Есть ли у кого-нибудь рабочий источник (или даже локальная копия) более новой версии, которую я мог бы проверить?
- Есть ли другой подход [библиотека, код .ahk и т. Д.], Который я мог бы использовать для своих целей? (желательно аналогично, потому что CMDret кажется очень простым)