![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается записать во входной буфер консоли WriteConsoleInput [D7, WinXP]
Serafim © (2009-02-10 17:38:00)У меня такая проблема - не получается записать во входной буфер консоли графического приложения так, как написано в 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?
Сергей М. (2009-02-11 00:29:00) [1]If the function fails, the return value is zero. To get extended error information, call GetLastError.