У меня такая проблема - не получается записать во входной буфер консоли графического приложения так, как написано в
http://www.delphimaster.ru/articles/console.html -
Объявляю переменные
ConsoleWindow : HWND;
InputHandle : THandle;
OutputHandle : THandle;
InputRecord : TInputRecord;
NumberOfRecords : Cardinal;
При создании формы пишу
procedure TForm1.FormCreate(Sender: TObject);
begin
AllocConsole;
ConsoleWindow := GetConsoleWindow;
ShowWindow ( ConsoleWindow, SW_MINIMIZE );
InputHandle := GetStdHandle ( STD_INPUT_HANDLE );
OutputHandle := GetStdHandle ( STD_OUTPUT_HANDLE );
end;
При нажатии клавиши в поле Edit
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
InputRecord.EventType := KEY_EVENT;
InputRecord.Event.KeyEvent.bKeyDown := TRUE;
InputRecord.Event.KeyEvent.wRepeatCount := 1;
InputRecord.Event.KeyEvent.wVirtualKeyCode := Key;
InputRecord.Event.KeyEvent.AsciiChar := Char ( Key );
WriteConsoleInput ( InputHandle,
InputRecord,
1,
NumberOfRecords );
InputRecord.Event.KeyEvent.bKeyDown := FALSE;
WriteConsoleInput ( InputHandle,
InputRecord,
1,
NumberOfRecords );
end;
И в консоли ничего не выводится, но должно, поскольку - это эмуляция нажатия клавиши в самой консоли.
Ксли же пишу
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Write ( InputHandle, Char ( Key ) );
end;
То символы выводятся, но перед ними пишется цифра 3.
Что делать, как писать во входной буфер консоли с помощью WriteConsoleInput?