Імітація натискання клавіш
Книги → Delphi. Трюки і ефекти → Імітація натискання клавіш
Стан клавіш на клавіатурі можна не тільки визначати, його також можна програмно змінювати. Розглянемо один із способів програмного натискання клавіш, який вкрай простий завдяки наявності API-функції keybdevent, як раз і призначеної для імітації клавіатурного введення.
Призначення параметрів цієї функції пояснимо на прикладі (лістинг 3.18).
procedure TForm1.cmbStartClick (Sender: TObject);
// Імітуємо натискання клавіші Windows
keybd_event (VK_LWIN, 0, 0, 0);
// Імітуємо відпускання клавіші Windows
keybd_event (VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
Нас цікавлять, перш за все, перший і третій параметри функції keybdevent (другий не використовується, а третій призначений для установки додаткової інформації, що відноситься до натискання клавіші). Першим параметром функції передається код "натискається» або «відпускається» клавіші. Третій параметр дорівнює нулю при «натисканні» і константі KEYEVENTF_KEYUP при «відпуску» клавіші.
При використанні keybd_event головне - не забувати «відпускати» програмно натиснуті клавіші (як це робиться в наведених тут прикладах). Інакше є ризик неабияких «г люків» клавіатурного введення.
Аналогічний наведеного в лістингу 3.18 приклад програмного натискання клавіші Print Screen (зняття копії екрану) наводиться в лістингу 3.19.
procedure TForm1.cmbPrintScreenClick (Sender: TObject);
// Натискаємо Print Screen
keybd_event (VK_SNAPSHOT, 0, 0, 0);
keybd_event (VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
У лістингу 3.20 наводиться приклад натискання комбінації з декількох клавіш (Windows + M для згортання всіх вікон).
procedure TForm1.cmbMinimizeAllClick (Sender: TObject);
keybd_event (VK_LWIN, 0, 0, 0);
keybd_event (Byte ( 'M'), 0, 0, 0);
keybd_event (Byte ( 'M'), 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
Додавання до цієї комбінації клавіші Shift приведе до відновлення первісного стану вікон.
Останній приклад ілюструє, як можна використовувати програмне натискання клавіш для прискорення швидкого доступу до програм. Мається на увазі програмне натискання сполучень клавіш, асоційованих з ярликами, розташованими на Робочому столі або знаходяться в меню Пуск. Припустимо, на комп'ютері використовується поєднання клавіш Ctrl + Alt + E для запуску Internet Explorer. Приклад програмного натискання цієї комбінації клавіш приведений в лістингу 3.21.
procedure TForm1.cmbEIxplorerClick (Sender: TObject);
// Натискаємо комбінацію Ctrl + Alt + E
keybd_event (VK_CONTROL, 0, 0, 0);
keybd_event (VK_MENU, 0, 0, 0);
keybd_event (Byte ( 'E'), 0, 0, 0);
keybd_event (Byte ( 'E'), 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Останній приклад особливо корисний для запуску відразу декількох програм (для цього ярликів цих програм повинні бути призначені комбінації клавіш).