Главная страница
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
10-1161585328
Max Ivanych
2006-10-23 10:35
2009.11.22
Передача формулы c кириллицей в ячейку Excel


15-1253990099
Pavia
2009-09-26 22:34
2009.11.22
PortMapping


2-1254679489
bodun
2009-10-04 22:04
2009.11.22
Нужна функция выполняющая тоже, что и Pack на Perl


4-1212570514
dll
2008-06-04 13:08
2009.11.22
LoadLibrary


2-1254828897
Zheksonz
2009-10-06 15:34
2009.11.22
CreateOleObject( ModbusSrv.ModbusSrv.1 );