Стандартное чтение вывода процесса оболочки в Visual Basic 6 - PullRequest
1 голос
/ 12 сентября 2011

Во-первых, позвольте мне сказать, что я не эксперт по Visual Basic 6 ...

Мне нужно:

  • запуск из клиентского кода VB6 внешнего файла .exe
  • дождитесь завершения процесса и - во время его выполнения - прочитайте сообщения, поступающие из его стандартного вывода "на лету" (чтобы я мог распечатать его в текстовом виджете или аналогичном).

Мне интересно, возможно ли вообще сделать это в VB6 ... после долгих поисков в Интернете я ничего не придумал. Нашел много примеров того, как использовать функцию Shell, но, кажется, вынуждает меня читать стандартный вывод сразу после завершения процесса, но я хочу опрашивать процесс для «свежих» сообщений, поскольку они стать доступным.

Любые фрагменты кода / предложения / ссылки действительно приветствуются.

Заранее спасибо!

Ответы [ 4 ]

6 голосов
/ 12 сентября 2011

Используйте CreatePipe(), чтобы создать анонимный канал, который вы можете передать CreateProcess(). Затем вы можете читать из этого канала по мере необходимости (используя опрос или перекрывающийся / асинхронный ввод / вывод.

Это должно дать вам достаточно информации, чтобы найти хороший пример.

4 голосов
/ 12 сентября 2011

Вы всегда можете использовать Exec метод WshShell для выполнения этой работы.

Я предпочитаю использовать собственное решение на основе API cExec.cls гораздо прощечем пользовательский элемент управления Боба Римерсма (но не такой универсальный).

2 голосов
/ 12 сентября 2011

Вы также можете создать пакетный файл, содержащий все команды, которые вам нужно запустить, а затем из VB6 вызвать пакетный файл, выполнив

 Shell "C:\YourPath\BatchFileName.bat > OutputFileName.txt"   'Overwrites OutputFilename.txt everytime

, как только вы выполните это, затем откройте OutputFileName.txtи вы найдете все сообщения и выходные данные, которые были сгенерированы в ходе пакетного процесса.Затем вы можете прочитать его в VB6 в виде простого open "filename" for input as #1

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

 Shell "C:\YourPath\BatchFileName.bat >> OutputFileName.txt"    'This will append to OutputFileName.txt
1 голос
/ 12 сентября 2011

Вот функция, которую вы хотите.Упражнение по объявлению API (CreatePipe, CreateProcessA, CloseHandle и т. Д.), Типов (PROCESS_INFORMATION, STARTUPINFO, SECURITY_ATTRIBUTES) констант (STARTF_USESTDHANDLES, STARF_USESHOWWINDOW и т. Д.) Оставлено для чтения. 100 * * 100 * * 100 *

...