Форум программистов, компьютерный форум CyberForum.ru

Как отследить результат выполнения "cmd dir"? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ::GetDlgItem : разные значения в замисимости от ОС http://www.cyberforum.ru/cpp-beginners/thread493382.html
::GetDlgItem : разные значения в замисимости от ОС Как известно, IDC_STATIC = (-1), так вот, вызывая ф-ю ::GetDlgItem(... , IDC_STATIC), где IDC_STATIC переменная, от которой надо взять HWND, ХР выдает валидный HWND (по крайней мере !=0), а, например, Win98, выдает 0. ПОЧЕМУ??? А теперь откуда возник вопрос: может кто сталкивался с проблемой, 'Access Violation at adress XXXXXX, file...
C++ Внимание! Интересная высокооплачиваемая работа для программиста. Компании занимающейся выпуском высокотехнологичной продукции требуется программист для выполнения следующей работы: 1. Необходимо разработать метод сравнения двух произвольных изображений (например, корреляционным способом) размером не более 600х600 точек. Результатом сравнения должен быть процент соответствия изображений, при этом одно изображение от другого может отличаться всем набором... http://www.cyberforum.ru/cpp-beginners/thread493290.html
Ошибка: IdSMTP1->QuickSend(Host, Subj, To, From, TextMess); IdSMTP1->Disconnect(); C++
AnsiString Host = '10.10.102.160'; AnsiString To = 'gg@tel.net'; AnsiString From = 'pp@tel.net'; AnsiString Subj = 'Hello!'; AnsiString TextMess = 'Test'; IdSMTP1->Connect(); IdSMTP1->Host = '10.10.102.160'; IdSMTP1->Password = '123456'; IdSMTP1->Port = 25;
МедиаПлейр в Windows Embeded Сannot detemine the device type C++
Здравствйте алл. Столкнулся с проблемкой. System--MediaPlayer В стандартной ВиндовсХП все работает. А в Embeded не работает При запуске Windows--system32--mplay32.exe и выборе файла пишет ошибку ту же, что и прогамка сделаная в билдере 'Сannot detemine the device type from the given filename extension.' Если же в mplay32.exe--Device выбрать Video for Windows и выбрать файл - то все...
C++ FTP через proxy. Подскажите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread493261.html
Неделю бьюсь, не могу получить файлы.. Сетка подключена к интернету через proxy (192.168.0.1:80) Необходимо взять/передать по ftp (вход-логин/пароль) файлы hInternetSession = InternetOpen(AfxGetApp()->m_pszAppName, INTERNET_OPEN_TYPE_PROXY, '192.168.0.1:80', INTERNET_INVALID_PORT_NUMBER, 0); //пробовал...
C++ Программирование на С/C++ для ST20 микроконтроллера Добрый день, Приглашаю пообщаться тех , кому по долгу службы или по велению сердца приходится программировать на С/С++ для микроконтроллерный систем, в частности основанных на микроконтроллере ST20 фирмы STMicroelectronic. С надеждой на плодотворное общение, Александр, jermakov#taide.lt подробнее

Показать сообщение отдельно
man_of_ring
4 / 4 / 0
Регистрация: 09.12.2010
Сообщений: 278
08.03.2011, 10:02     Как отследить результат выполнения "cmd dir"?
Как захватить весь вывод в консоли.

Компилятор: Delphi



Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
unit consoleoutput; 
 
interface
 
uses
  Controls, Windows, SysUtils, Forms;
 
function GetDosOutput(const CommandLine:string): string;
 
implementation
 
function GetDosOutput(const CommandLine:string): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of Char;
  BytesRead: Cardinal;
  WorkDir, Line: String;
begin
  Application.ProcessMessages;
  with SA do
  begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  // создаём пайп для перенаправления стандартного вывода
  CreatePipe(StdOutPipeRead,  // дескриптор чтения
             StdOutPipeWrite, // дескриптор записи
             @SA,              // аттрибуты безопасности
             0                // количество байт принятых для пайпа - 0 по умолчанию
             );
  try
    // Создаём дочерний процесс, используя StdOutPipeWrite в качестве стандартного вывода,
    // а так же проверяем, чтобы он не показывался на экране.
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE); // стандартный ввод не перенаправляем
      hStdOutput := StdOutPipeWrite;
      hStdError := StdOutPipeWrite;
    end;
 
    // Запускаем компилятор из командной строки
    WorkDir := ExtractFilePath(CommandLine);
    WasOK := CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, PChar(WorkDir), SI, PI);
 
    // Теперь, когда дескриптор получен, для безопасности закрываем запись.
    // Нам не нужно, чтобы произошло случайное чтение или запись.
    CloseHandle(StdOutPipeWrite); 
    // если процесс может быть создан, то дескриптор, это его вывод
    if not WasOK then
      raise Exception.Create('Could not execute command line!')
    else
      try
        // получаем весь вывод до тех пор, пока DOS-приложение не будет завершено
        Line := ''
        repeat
          // читаем блок символов (могут содержать возвраты каретки и переводы строки)
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
 
          // есть ли что-нибудь ещё для чтения?
          if BytesRead > 0 then
          begin
            // завершаем буфер PChar-ом
            Buffer[BytesRead] := #0;
            // добавляем буфер в общий вывод
            Line := Line + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        // ждём, пока завершится консольное приложение
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        // Закрываем все оставшиеся дескрипторы
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
      result:=Line;
      CloseHandle(StdOutPipeRead);
  end;
end;
 
end.
Запуск программ с передачей консольного ввода и чтением вывода.

Компилятор: Delphi

Автор: Алексей Бойко

Это пример запуска консольных программ с передачей ей консольного ввода (как если бы он был введен с клавиатуры после запуска программы) и чтением консольного вывода. Таким способом можно запускать например стандартный виндовый ftp.exe (в невидимом окне) и тем самым отказаться от использования специализированных, зачастую глючных компонент.

Delphi
1
2
3
4
5
function ExecuteFile(FileName,StdInput: string;
                     TimeOut: integer;
                     var StdOutput:string) : boolean;
 
label Error;
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru