Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Симулируем нажатие клавиш на клавиатуре 4

Delphi , ОС и Железо , Клавиши

Симулируем нажатие клавиш на клавиатуре 4

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

 {With SendInput API}

 // Example: Send text 
procedure TForm1.Button1Click(Sender: TObject);
 const
    Str: string = 'writing writing writing';
 var
   Inp: TInput;
   I: Integer;
 begin
   Edit1.SetFocus;

   for I := 1 to Length(Str) do
   begin
     // press 
    Inp.Itype := INPUT_KEYBOARD;
     Inp.ki.wVk := Ord(UpCase(Str[i]));
     Inp.ki.dwFlags := 0;
     SendInput(1, Inp, SizeOf(Inp));

     // release 
    Inp.Itype := INPUT_KEYBOARD;
     Inp.ki.wVk := Ord(UpCase(Str[i]));
     Inp.ki.dwFlags := KEYEVENTF_KEYUP;
     SendInput(1, Inp, SizeOf(Inp));

     Application.ProcessMessages;
     Sleep(80);
   end;
 end;

 // Example: Simulate Alt+Tab 
procedure SendAltTab;
 var
   KeyInputs: array of TInput;
   KeyInputCount: Integer;

   procedure KeybdInput(VKey: Byte; Flags: DWORD);
   begin
     Inc(KeyInputCount);
     SetLength(KeyInputs, KeyInputCount);
     KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
     with  KeyInputs[KeyInputCount - 1].ki do
     begin
       wVk := VKey;
       wScan := MapVirtualKey(wVk, 0);
       dwFlags := KEYEVENTF_EXTENDEDKEY;
       dwFlags := Flags or dwFlags;
       time := 0;
       dwExtraInfo := 0;
     end;
   end;
 begin
   KeybdInput(VK_MENU, 0);                // Alt 
  KeybdInput(VK_TAB, 0);                 // Tab 
  KeybdInput(VK_TAB, KEYEVENTF_KEYUP);   // Tab 
  KeybdInput(VK_MENU, KEYEVENTF_KEYUP); // Alt 
  SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0]));
 end;

Код написан на языке Delphi и использует функцию Windows API SendInput для имитации ввода клавиатуры. Цель - имитировать ввод текста или выполнять действия, такие как нажатие Alt+Tab.

Вот разбивка кода:

Первый процедура: Отправка текста

Процедура Button1Click имитирует ввод строки текста (Str) в редактируемом контроле (Edit1). Она делает это, перебирая каждый символ в строке и отправляя событие KEYDOWN для этого символа, а затем событие KEYUP.

Цикл проходит по каждому символу в строке:

  • Для каждого символа создается структура TInput (массив которых хранится в Inp) с следующими свойствами:
    • Itype: устанавливается в INPUT_Keyboard, указывая, что это ввод клавиатуры.
    • ki.wVk: устанавливается в код ASCII верхнего регистра символа (Ord(UpCase(Str[i]))).
    • dwFlags: изначально устанавливается в 0, что означает событие нажатия клавиши.
  • Затем отправляется структура TInput с помощью SendInput, имитируя нажатие клавиши.
  • После отправки события KEYDOWN ожидается 80 миллисекунд (Sleep(80)) перед отправкой соответствующего события KEYUP.

Вторая процедура: Отправка Alt+Tab

Процедура SendAltTab имитирует нажатие и отпускание клавиш Alt и Tab в последовательности. Она использует массив структур TInput для хранения событий ввода и отправляет их с помощью SendInput.

Процедура определяет вложенную функцию KeybdInput, которая создает одиночную структуру TInput с указанным кодом виртуальной клавиши (VKey) и флагами (Flags). Флаги параметра используются для указания, является ли это событие нажатия или отпускания клавиши.

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

Вот что происходит в более подробном виде:

  • Имитруется нажатие клавиши Alt, вызвав KeybdInput с VK_MENU (Alt) и 0 как флагами.
  • Имитруется нажатие клавиши Tab, вызвав KeybdInput с VK_TAB (Tab) и 0 как флагами.
  • Имитруется отпускание клавиши Tab, вызвав KeybdInput с VK_TAB (Tab) и KEYEVENTF_KEYUP как флагами.
  • Наконец, имитруется отпускание клавиши Alt, вызвав KeybdInput с VK_MENU (Alt) и KEYEVENTF_KEYUP как флагами.

Замечания

Код использует функцию SendInput для отправки событий ввода клавиатуры. Это низкоуровневая API-функция, которая позволяет имитировать ввод пользователя, что может быть полезно для автоматизации задач или тестирования программного обеспечения.

Структура TInput используется для представления отдельных событий ввода, таких как нажатия клавиш или клики мыши. Поле Itype указывает тип события ввода (например, клавиатуры).

Код использует функцию Ord для преобразования символа в код ASCII, а UpCase для получения верхнего регистра символа.

В целом, этот код предоставляет основное пример использования Windows API для имитации ввода клавиатуры с помощью Delphi.

Симулируем нажатие клавиш на клавиатуре с помощью API SendInput в Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Клавиши ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:58:34/0.00347900390625/0