Delphi: виртуальные клавиши. Программное нажатие клавиш
В этой статье рассказано о том, как с помощью Delphi написать программу, которая будет отслеживать глобальное нажатие комбинаций клавиш, и сама нажимать на клавиши. Идея написать подобную программу пришла после того, как в игре “Diablo 3” появилась сложная задача, требующая многократного нажатия клавиш.
Нажимать программно кнопки можно с помощью таймера – стандартного компонента Timer1 в Delphi.
Итак, приступим.
Создаем новый проект с формой (можно без формы, но для обучения подходит и с формой). В тексте модуля ищем раздел PRIVATE и добавляем туда описание процедуры:
private { Private declarations } id1: Integer; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
Там же добавлено описание переменной, в которой будет храниться код глобального сочетания клавиш.
В разделе IMPLEMENTATION пишем тело процедуры
implementation {$R *.DFM} // Trap Hotkey Messages procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey = id1 then begin // была нажата наша клавиша // совершаем какие-то действия end; end;
Формируем процедуру создания формы, в которой зарегистрируем глобальный перехват комбинации клавиш CTRL+A.
procedure TForm1.FormCreate(Sender: TObject); const MOD_CONTROL = 2; VK_A = $41; begin // Register Hotkey Ctrl + A id1 := GlobalAddAtom('Hotkey1'); RegisterHotKey(Handle, id1, MOD_CONTROL, VK_A); end;
При закрытии программы осовободим глобальный перехватчик нажатия клавиш.
procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Handle, id1); GlobalDeleteAtom(id1); end;
Программно нажимаем, например, на клавишу '1' с помощью процедуры Timer компонента Timer1 (не забудьте поставить этот компонент на форму).
procedure TForm1.Timer1Timer(Sender: TObject); begin Application.ProcessMessages; keybd_event(Ord('1'), 0, 0, 0); //Нажатие '1'. Application.ProcessMessages; Sleep(round(Random(500))); Application.ProcessMessages; keybd_event(Ord(‘1’), 0, KEYEVENTF_KEYUP, 0); //Отпускание '1'. Application.ProcessMessages; end;
В этой процедуре последовательно вызываются функции отправки сообщений в систему о нажатии клавиши '1', о паузе (как будто мы держим клавишу нажатой), об отпускании клавиши.
Между этими функциями вставлены обработчики Application.ProcessMessages, позволяющие принимать программой другие сообщения от операционной системы.
Prolog — это язык логического программирования. Он является декларативным языком: вся стуктура программы представлена в виде правил и фактов. На нем можно строить экспертные системы, генерирующие ответы вида true (истина) или false (ложь). Пролог хорошо подходит для автоматического перебора вариантов решений с возвратами. Язык не требует написания большого объемного кода и позволяет получать отличные результаты.
Интересные материалы на сайте:
Исправляем проблему дублей страниц на сайте и склейку доменов с www.
Аналитическая статья для любителей ставок в букмеккерских конторах.
Вводная статья о кодировании цифр с помощью таблиц азбуки Морзе.
Рассматривается алгоритм получения НОД и НОК двух чисел.