Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.22;
Скачать: CL | DM;

Вниз

Как в режиме раельного времени работать с вводом/выводом консоли?   Найти похожие ветки 

 
relaxive   (2009-10-11 15:57) [0]

Т.е. открыть консоль, получать данные при выводе информации и посылать данные в консоль при этом не закрывая ее. Например:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Admin>

Произошел вывод - выводим это в своем приложении

Вводим:
cd ..
И так далее.


 
relaxive   (2009-10-11 16:48) [1]

Вообщем понял что через пайпы, дайте работающий дод, этот не работает:
program Project1;
{$APPTYPE CONSOLE}

uses Windows,
    SysUtils;

var SA:TSecurityAttributes;
   SI:TStartupInfo;
   PI:TProcessInformation;
   fexit,cstdin,wstdin,rstdout,cstdout:THandle;
   WasOK:Boolean;
   ReadBuff,WriteBuff:array[0..255]of Char;
   BytesCount:Cardinal;

begin

with SA do
begin
 nLength:=SizeOf(SA);
 bInheritHandle:=True;
 lpSecurityDescriptor:=nil;
end;

if not CreatePipe(cstdin,wstdin,@SA,0) then exit;
if not CreatePipe(rstdout,cstdout,@SA,0) then exit;

GetStartupInfo(SI);

try

 with SI do
 begin
   dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
   wShowWindow:=SW_HIDE;
   hStdOutput:=cstdout;
   hStdError:=cstdout;
   hStdInput:=cstdin;
 end;

 WasOK:=CreateProcess(nil,PChar("cmd"),nil,nil,true,CREATE_NEW_CONSOLE{0},nil,nil ,SI,PI);

 if not WasOK then exit
 else
   try

   while((GetExitCodeProcess(PI.hProcess,fexit))and(fexit=STILL_ACTIVE)and(WriteBuf f<>"exit"))do
   begin
   readln(WriteBuff);
   WriteFile(wstdin,WriteBuff,1,BytesCount,nil);
   repeat
     WasOK:=ReadFile(rstdout,ReadBuff,255,BytesCount,nil);
       if BytesCount > 0 then
       begin
         write(ReadBuff);
       end;
   until not WasOK or(BytesCount<255);
     sleep(1);
   end;

   WaitForSingleObject(PI.hProcess,INFINITE);
   finally

   CloseHandle(PI.hThread);
   CloseHandle(PI.hProcess);
   end;

finally
CloseHandle(fexit);
CloseHandle(cstdin);
CloseHandle(wstdin);
CloseHandle(rstdout);
CloseHandle(cstdout);
end;

end.

Проблема с циклом


 
Германн ©   (2009-10-12 00:42) [2]


> дайте работающий дод

У меня нет такого дода. :(


 
Eraser ©   (2009-10-12 01:54) [3]

> [0] relaxive   (11.10.09 15:57)

ищи в гугле, примеров полно. в JEDI даже спец. компонент есть.



Страницы: 1 вся ветка

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
1-1225211215
leonidus
2008-10-28 19:26
2009.11.22
Кодирование кириллицы для использования в URL


10-1159674288
arty
2006-10-01 07:44
2009.11.22
Delphi+MathCad


2-1254184080
Drowsy
2009-09-29 04:28
2009.11.22
Странно работает TOpenDialog ..


2-1254821561
ford
2009-10-06 13:32
2009.11.22
Drag n Drop TStringGrid


2-1254482329
Aleks
2009-10-02 15:18
2009.11.22
Как программно нажать кнопку на форме?