Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2009, 07:29   #1
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию Читает вывод из консоли

я делал программу что бы она запускала консольную программу и считывала ее результат, но почему то не считывает вот код
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure RunDosInMemo(DosApp:String;AMemo:TMemo) ;
const
   ReadBuffer = 512;
var
 l:boolean;

 Security : TSecurityAttributes;
 ReadPipe,WritePipe : THandle;
 start : TStartUpInfo;
 ProcessInfo : TProcessInformation;
 Buffer : Pchar;
 BytesRead : DWord;
 Apprunning : DWord;
 x : Integer;
 MyStr : String;
begin


   x := 0;
   With Security do
   begin
    Security.nlength := SizeOf(TSecurityAttributes) ;
    Security.binherithandle := true;
    Security.lpsecuritydescriptor := nil;
   end;

   if Createpipe (ReadPipe, WritePipe,
                  @Security, 0) then
   begin
     Buffer := AllocMem(ReadBuffer + 1) ;
     FillChar(Start,Sizeof(Start),#0) ;
     start.cb := SizeOf(STARTUPINFO) ;
     start.hStdOutput := WritePipe;
     start.hStdInput := ReadPipe;
     start.dwFlags := STARTF_USESTDHANDLES ;
     start.wShowWindow := SW_SHOW;

     if CreateProcess(nil,
           PChar(DosApp),
           @Security,
           @Security,
           true,
           NORMAL_PRIORITY_CLASS,
           nil,
           nil,
           start,
           ProcessInfo)
     then
     begin
     CloseHandle(WritePipe) ;
         WaitForSingleObject(ProcessInfo.hProcess, INFINITE);

         BytesRead := 0;
         l:=ReadFile(start.hStdInput,Buffer[0],ReadBuffer,BytesRead,nil) ;

         ShowMessage(Buffer);
         Buffer[BytesRead]:= #0;
         OemToAnsi(Buffer,Buffer) ;

         AMemo.Lines.Add(MyStr);
         AMemo.Refresh;
         Application.ProcessMessages;

       FreeMem(Buffer) ;
       CloseHandle(ProcessInfo.hProcess) ;
       CloseHandle(ProcessInfo.hThread) ;
       CloseHandle(ReadPipe) ;

     end;

   end;

  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   RunDosInMemo('c:\cons.exe',memo1) ;
end;

end.
что сделано не так??? может кто знает???
да к стати консольная программа cons.exe просто выводит на экран строку 12345678910, написана на pascal может я что то не понял и нельзя так делать????

Последний раз редактировалось Consol; 25.08.2009 в 07:38.
Consol вне форума Ответить с цитированием
Старый 25.08.2009, 08:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.programmersforum.ru/showt...ExecConsoleApp

Сравни свое с тем примером, или просто возьми его и используй
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2009, 08:41   #3
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

не знаю, но у меня то что ты скинул не работает, не дает никаких результатов, только ошибки выводит, ну я имеу квиду когда прописываю свою программу

Последний раз редактировалось Consol; 25.08.2009 в 08:43.
Consol вне форума Ответить с цитированием
Старый 25.08.2009, 08:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Consol
У меня все работает. Значит cons.exe дурная, или Ось твоя не позволяет того делать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2009, 08:57   #5
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

ну тоесть у тебя работает даже если ты свою подставляешь прогу вместо ping localhost????
Consol вне форума Ответить с цитированием
Старый 25.08.2009, 09:18   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ну тоесть у тебя работает даже если ты свою подставляешь прогу вместо ping localhost????
Не понял? О чем это ты?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2009, 09:42   #7
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

ну то есть мне то надо получить результат консольной программы cons.exe
а в том примере что ты мне дал там получаем результат команды ping localhost
так вот что мне надо сделать что бы получить результат работы cons.exe я как понимаю мне надо в функцию вместо ping localhost подставить cons.exe или я что то не понял???
Consol вне форума Ответить с цитированием
Старый 25.08.2009, 09:52   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну да. имено. Все практически так же как и в твоем первом посте.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2009, 09:59   #9
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

А не проще скидывать результат работы консоли в (пример temp.txt), а потом загружать в свою программу (Возможны проблемы с кодировкой кирилицы)
Пример:
ipconfig /all > C:\temp.txt
Noor вне форума Ответить с цитированием
Старый 31.08.2009, 03:17   #10
Luke
Пользователь
 
Аватар для Luke
 
Регистрация: 12.10.2007
Сообщений: 32
По умолчанию

Написана на паскале... Стало быть она работает в DOS подсистеме (ntvdm), перехватить вывод таким способом не получиться.
Si vis pacem, para bellum!
Luke вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как захватить весь вывод в консоли??? alexfmf Общие вопросы Delphi 5 13.05.2009 21:54
Вывод в консоли на русском языке символов prikolist Общие вопросы C/C++ 8 06.04.2009 18:52
не читает входную строчку DoGGy Паскаль, Turbo Pascal, PascalABC.NET 3 23.01.2009 21:46
плеер Divx не читает Xatr Софт 4 26.12.2008 03:00
DEV C++ не читает русские буквы gumar Общие вопросы C/C++ 1 21.04.2008 09:53