www.gcmsite.ru

Новости Программы PHP-скрипты Статьи Числа
Услуги Резюме Игры Автомобили Поиск

СИСТЕМНОЕ И ВЕБ-ПРОГРАММИРОВАНИЕ
компьютерная техника, игры

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, позволяющие принимать программой другие сообщения от операционной системы.


Apache — это кросплатформаенное программное обеспечение, относящееся к классу http-серверов. Поддерживается множеством операционных систем: Windows, Linux, MacOS и т.д. Одним из ключевых факторов в вопросе использования данного web-сервера является гибкость настройки и надежность выполнения операций. Apache включает в себя множество дополнительных модулей, позволяющих работать с различными базами данных, контролировать аутентификацию пользователей и т.д.

Интересные материалы на сайте:

Автор, разработчик: Шаров Евгений   (gcmsite@yandex.ru)
(c) 2000-2020 GCM-Site - системное и веб-программирование
Цитирование материалов сайта возможно только при наличии гиперссылки