Отправка команд в консольную программу из Visual Basic 6

У меня есть консольная программа в windows (скомпилированная версия командной строки curl), в которой вы можете писать команды и получать возврат. Как я могу отправить команды в это консольное приложение и вернуть результат в VB6? Я знаю, что вы можете сделать это с помощью команд DOS с помощью Windows Script Host, но, как вы видите, команды, которые я хочу запустить, не находятся в command.exe

Спасибо!


person DomingoSL    schedule 26.04.2010    source источник


Ответы (4)


Доминго -

Что ж, я предполагаю, что, поскольку вы упомянули об этом, вы знаете, как использовать библиотеку WSH. Единственная дополнительная информация, которая вам нужна, — это строка для выполнения нужной вам команды. Вы можете запускать команды DOS с этой строкой в ​​Windows 95/98/Me:

Dim sMyCommandLine As String

sMyCommandLine = "command.exe /c MYCOMMAND"

Однако более вероятно, что вы будете использовать операционную систему на базе NT, такую ​​как Windows NT, 2000, XP, Vista или 7, и в этом случае вам следует использовать:

sMyCommandLine = "cmd.exe /c MYCOMMAND"
person Mark Bertenshaw    schedule 26.04.2010

Вы можете использовать объект Microsoft.XMLHTTP ActiveX для выполнения HTTP-запросов, например:

Set request = CreateObject("Microsoft.XMLHTTP")
request.open "POST", url, false
request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
request.send postData
response = request.responseText
person SLaks    schedule 26.04.2010
comment
извините, как я уже сказал, я хочу использовать конкретное консольное приложение, которое у меня есть - person DomingoSL; 26.04.2010
comment
Почему? Вы должны иметь возможность делать что угодно, используя XMLHTTP, и это должно быть быстрее. - person SLaks; 26.04.2010
comment
Насколько я знаю, XMLHttp поддерживает только HTTP. Curl может использовать другие протоколы. - person Mark Bertenshaw; 26.04.2010

Вы должны иметь возможность запускать эту штуку curl как дочерний процесс, перенаправляя его стандартные потоки ввода-вывода в анонимные каналы. Однако в VB6 нет ничего, что напрямую поддерживало бы это.

Один из способов — использовать те же элементы, что и в сценарии WSH, добавив ссылку на объектную модель узла сценария Windows. Другой более чистый подход, который не создает окно консоли, включает ряд вызовов API для создания дочернего процесса, управления им и чтения/записи анонимных каналов в вашей программе VB6. Это больше работы, если вы еще не создали компонент для этого.

person Bob77    schedule 26.04.2010

Вы можете использовать функцию Shell для запуска консольного приложения, но она не вернет результат дочернего процесса — так называемый Errorlevel в пакетных сценариях.

Для блокирующей замены Shell вы можете ознакомьтесь с ShellWait функцией, опубликованной здесь.

person wqw    schedule 29.04.2010