Главная страница
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.013 c
15-1253990099
Pavia
2009-09-26 22:34
2009.11.22
PortMapping


3-1229485271
Karburator
2008-12-17 06:41
2009.11.22
уведомление из FireBird приложения


2-1254664097
bodun
2009-10-04 17:48
2009.11.22
Как правильно использовать указатели в данной задаче


15-1251547820
Kerk
2009-08-29 16:10
2009.11.22
Захват потокового видео из браузера


11-1199016802
jabu
2007-12-30 15:13
2009.11.22
Form.ActiveControl not work