Как ввести текст в консоль другого приложения из delphi?

Пользователь

от violette_robel , в категории: Другие , год назад

Как ввести текст в консоль другого приложения из delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от bernardo_nolan , год назад

@violette_robel 

Для ввода текста в консоль другого приложения из Delphi можно использовать функцию WriteConsoleInput, которая позволяет записать ввод пользователя в буфер ввода консоли.


Для использования этой функции необходимо выполнить следующие шаги:

  1. Получить дескриптор консоли другого приложения, в который нужно вводить текст. Для этого можно использовать функцию FindWindow для поиска окна консоли другого приложения и GetStdHandle для получения дескриптора стандартного ввода.
  2. Создать структуру INPUT_RECORD для каждого символа, который нужно ввести в консоль. В эту структуру необходимо записать код клавиши и соответствующие флаги.
  3. Вызвать функцию WriteConsoleInput, передав ей дескриптор консоли и массив структур INPUT_RECORD.


Ниже приведен пример кода, который можно использовать для ввода текста в консоль другого приложения:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const
  WM_KEYDOWN = $0100;

var
  hConsoleWnd: HWND;
  hConsoleIn: THandle;
  InputRecord: TInputRecord;
  InputBuffer: array [0..255] of TInputRecord;
  i, j: Integer;
  sText: string;
begin
  // Получаем дескриптор консоли другого приложения
  hConsoleWnd := FindWindow(nil, 'Имя окна консоли');
  hConsoleIn := GetStdHandle(STD_INPUT_HANDLE);

  // Вводим текст в консоль
  sText := 'Hello, World!' + #13#10; // текст для ввода
  for i := 1 to Length(sText) do
  begin
    // Заполняем структуру INPUT_RECORD для каждого символа
    InputRecord.EventType := KEY_EVENT;
    InputRecord.Event.KeyEvent.bKeyDown := True;
    InputRecord.Event.KeyEvent.wRepeatCount := 1;
    InputRecord.Event.KeyEvent.wVirtualKeyCode := VkKeyScan(sText[i]);
    InputRecord.Event.KeyEvent.wVirtualScanCode := MapVirtualKey(InputRecord.Event.KeyEvent.wVirtualKeyCode, 0);
    InputRecord.Event.KeyEvent.uChar.UnicodeChar := sText[i];
    InputRecord.Event.KeyEvent.dwControlKeyState := 0;

    // Записываем структуру в буфер ввода
    InputBuffer[i - 1] := InputRecord;
  end;

  // Отправляем буфер ввода в консоль
  WriteConsoleInput(hConsoleIn, InputBuffer, Length(sText), j);
end;


Обратите внимание, что для использования этой функции необходимо, чтобы приложение, в которое вы вводите текст, имело открытую консоль. Если консоль не открыта, то можно использовать функции для запуска консоли и ввода текста в нее.