Пятница, 29 Ноября 2024, 07:38

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Результаты поиска
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) т.е не переназначать вход, так же приравнивал это значение нулю.
Все равно консоль перестает реагировать на сообщения клавиатуры.Куда копать?
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг