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

Регистрация горячих системных клавиш

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

Регистрация горячих системных клавиш

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

{ 
  The following example demonstrates registering hotkeys with the 
  system to globally trap keys. 

  Das Folgende Beispiel zeigt, wie man Hotkeys registrieren und 
  darauf reagieren kann, wenn sie gedruckt werden. (systemweit) 
}

 unit Unit1;

 interface

 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
   Dialogs;

 type
   TForm1 = class(TForm)
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
   private
     { Private declarations }
     id1, id2, id3, id4: Integer;
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
   public
     { Public declarations }
   end;

 var
   Form1: TForm1;

 implementation

 {$R *.dfm}

 // Trap Hotkey Messages 
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
 begin
   if Msg.HotKey = id1 then
     ShowMessage('Ctrl + A pressed !');
   if Msg.HotKey = id2 then
     ShowMessage('Ctrl + Alt + R pressed !');
   if Msg.HotKey = id3 then
     ShowMessage('Win + F4 pressed !');
   if Msg.HotKey = id4 then
     ShowMessage('Print Screen pressed !');
 end;

 procedure TForm1.FormCreate(Sender: TObject);
   // Different Constants from Windows.pas 
const
   MOD_ALT = 1;
   MOD_CONTROL = 2;
   MOD_SHIFT = 4;
   MOD_WIN = 8;
   VK_A = $41;
   VK_R = $52;
   VK_F4 = $73;
 begin
   // Register Hotkey Ctrl + A 
  id1 := GlobalAddAtom('Hotkey1');
   RegisterHotKey(Handle, id1, MOD_CONTROL, VK_A);

   // Register Hotkey Ctrl + Alt + R 
  id2 := GlobalAddAtom('Hotkey2');
   RegisterHotKey(Handle, id2, MOD_CONTROL + MOD_Alt, VK_R);

   // Register Hotkey Win + F4 
  id3 := GlobalAddAtom('Hotkey3');
   RegisterHotKey(Handle, id3, MOD_WIN, VK_F4);

   // Globally trap the Windows system key "PrintScreen" 
  id4 := GlobalAddAtom('Hotkey4');
   RegisterHotKey(Handle, id4, 0, VK_SNAPSHOT);
 end;

 // Unregister the Hotkeys 
procedure TForm1.FormDestroy(Sender: TObject);
 begin
   UnRegisterHotKey(Handle, id1);
   GlobalDeleteAtom(id1);
   UnRegisterHotKey(Handle, id2);
   GlobalDeleteAtom(id2);
   UnRegisterHotKey(Handle, id3);
   GlobalDeleteAtom(id3);
   UnRegisterHotKey(Handle, id4);
   GlobalDeleteAtom(id4);
 end;

 end.

 { 
  RegisterHotKey fails if the keystrokes specified for the hot key have 
  already been registered by another hot key. 

  Windows NT4 and Windows 2000/XP: The F12 key is reserved for use by the 
  debugger at all times, so it should not be registered as a hot key. Even 
  when you are not debugging an application, F12 is reserved in case a 
  kernel-mode debugger or a just-in-time debugger is resident. 
}

Код демонстрирует, как зарегистрировать глобальные горячие клавиши в приложении на Delphi с помощью Windows API.

Процедура FormCreate - это место, где происходит магия: 1. В первой шаге мы добавляем атом для каждой горячей клавиши с помощью GlobalAddAtom. Это создает уникальный идентификатор для горячей клавиши. 2. Затем мы используем RegisterHotKey для регистрации горячей клавиши в системе. Мы передаем в нее handle основного окна приложения (Handle), ID горячей клавиши (id1, id2 и т.д.), модификаторы (например, MOD_CONTROL) и код.virtualной клавиши (например, VK_A). 3. Горячие клавиши зарегистрированы глобально, что означает, что они будут вызываться даже когда приложение не находится в фокусе.

Процедура WMHotKey вызывается каждый раз, когда зарегистрированная горячая клавиша нажата: 1. Мы проверяем, которая горячая клавиша была нажата, сравнивая ее ID (Msg.HotKey) с ID, которые мы зарегистрировали ранее. 2. Если соответствие найдено, мы отображаем сообщение с текстом.

Для отмены регистрации горячих клавиш при закрытии приложения мы используем процедуру FormDestroy: 1. Мы вызываем UnRegisterHotKey, чтобы отменить каждую горячую клавишу. 2. Затем мы удаляем атомы с помощью GlobalDeleteAtom.

Некоторые примечания к коду:

  • Константы, определенные в разделе const, являются из Windows API и представляют собой различные модификаторы клавиш (например, MOD_ALT, MOD_CONTROL) и коды.virtualных клавиш (например, VK_A, VK_R).
  • Переменная Handle assumed to be handle основного окна приложения. В реальном сценарии вам нужно будет получить этот handle программно.
  • Как упоминалось в комментариях, некоторые клавиши зарезервированы для системного использования и не должны быть зарегистрированы как горячие клавиши (например, F12).

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

Регистрация горячих системных клавиш позволяет создать глобальные события для обработки различных комбинаций клавиш в Windows-приложении, включая контрольные клавиши Ctrl, Alt и Win, а также системную клавишу Print Screen.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 14:20:59/0.0055909156799316/1