chuxlo | Дата: Среда, 27 Января 2016, 22:49 | Сообщение # 1 | Тема: Перехват консольного вывода. |
был не раз
Сейчас нет на сайте
| Конкректно.Пытаюсь написать оболочку для Mplayer.exe (консольный плейер).При перехвате его вывода он перестает реагировать на отсылаемые ему клавиатурные комбинации.При запуске без перехвата на посылаемую клавиатуру реагирует.Поэтому суть проблемы-нужен и перехват и реакция на ввод клавиатуры.
|
|
| |
chuxlo | Дата: Среда, 27 Января 2016, 22:28 | Сообщение # 2 | Тема: Перехват консольного вывода. |
был не раз
Сейчас нет на сайте
| Что именно в коде напоминает ошибку?
|
|
| |
chuxlo | Дата: Среда, 27 Января 2016, 21:59 | Сообщение # 3 | Тема: Перехват консольного вывода. |
был не раз
Сейчас нет на сайте
| procedure RunDosInMemo(CmdLine: string;listbox:tListbox {AMemo: TMemo}); const ReadBuffer = 2400; var Security: TSecurityAttributes; PipeErr, ReadPipe, WritePipe: THandle; start: TStartUpInfo; ProcessInfo: TProcessInformation; bu,WBuffer,Buffer: Pchar; nr,BytesWrite,BytesRead: DWord; Apprunning: DWord; s:string; sInternalBuff: AnsiString; bread:cardinal; begin with Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe(ReadPipe, WritePipe,@Security, 0) then begin Buffer := AllocMem(ReadBuffer + 1); FillChar(Start, Sizeof(Start), #0); start.cb := SizeOf(start); start.hStdOutput := WritePipe; // start.hStdInput := GetStdHandle(STD_INPUT_HANDLE);// don't redirect stdin //start.hStdInput :=ReadPipe; // start.hStdInput :=0; start.dwFlags := STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; // start.wShowWindow := SW_SHOW; if CreateProcess(nil, PChar(CmdLine), @Security, @Security, true,{CREATE_NEW_CONSOLE or} NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then begin repeat Apprunning := WaitForSingleObject (ProcessInfo.hProcess, 100); ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil); Buffer[BytesRead] := #0; OemToAnsi(Buffer, Buffer); s:=copy(string(Buffer),pos('A:',string(Buffer))+2,25); listbox.items.Strings[0]:=s; Application.ProcessMessages; sleep(800); until (Apprunning <> WAIT_TIMEOUT); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end; end;
|
|
| |
chuxlo | Дата: Вторник, 26 Января 2016, 19:17 | Сообщение # 4 | Тема: Перехват консольного вывода. |
был не раз
Сейчас нет на сайте
| Добрый день форумчане выручайте.Перехватываю вывод консоли.Все работает вывод перехватывается,но консоль перестает реагировать на отсылаемые ей клавиатурные сообщения.При обычном запуске все нормально консоль реагирует на клавиатурные сообщения.При запуске с перехватом указываю start.hStdInput := GetStdHandle(STD_INPUT_HANDLE) т.е не переназначать вход, так же приравнивал это значение нулю. Все равно консоль перестает реагировать на сообщения клавиатуры.Куда копать?
|
|
| |