В некотором царстве в некотором государстве на 39 уровне жил был Кащей Бесcмертный и было у него 4 жизни и лабиринт, а смерть его была ctrl+alt +delete. Тут и сказочке Esc, а кто не понял F1.
{
The following example demonstrates registering hot keys with the
system to globally trap keys.
}unit Unit1;
interfaceuses
Windows, Messages, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private// Hotkey Ids
id1, id2, id3, id4: Integer;
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
{ Privat-Declarations}public{ Public-Declarations}end;
var
Form1: TForm1;
implementation{$R *.DFM}// Trap Hotkey Messages procedure TForm1.WMHotKey(var Msg: TWMHotKey);
beginif Msg.HotKey = id1 then
ShowMessage('Ctrl + A was pressed !');
if Msg.HotKey = id2 then
ShowMessage('Ctrl + Alt + R was pressed !');
if Msg.HotKey = id3 then
ShowMessage('Win + F4 was pressed !');
if Msg.HotKey = id4 then
ShowMessage('Print Screen was 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 = 65;
VK_R = 82;
VK_F4 = 115;
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);
UnRegisterHotKey(Handle, id2);
UnRegisterHotKey(Handle, id3);
UnRegisterHotKey(Handle, 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 RegisterHotKey. Каждая горячая клавиша связана с уникальным идентификатором (id1, id2, id3 и id4) и набором модификаторов и кодом виртуальной клавиши.
Описание кода:
Процедура WMHotKey - обработчик сообщения WM_HOTKEY, которое отправляется окну при нажатии горячей клавиши.
В процедуре FormCreate зарегистрируются четыре горячие клавиши:
id1: Ctrl+A
id2: Ctrl+Alt+R
id3: Win+F4
id4: Print Screen (VK_SNAPSHOT)
Функция RegisterHotKey используется для регистрации каждой горячей клавиши. Она принимает четыре параметра:
Handle: handle окна, которое будет получать сообщение WM_HOTKEY, когда горячая клавиша нажата
id: уникальный идентификатор для горячей клавиши
fsModifiers: набор модификаторов (например, Ctrl, Alt, Shift), которые должны быть нажаты вместе с кодом виртуальной клавиши
vk: код виртуальной клавиши (например, A, R, F4)
Процедура FormDestroy вызывается при закрытии формы и отменяет регистрацию всех четырех горячих клавиш.
Обратите внимание, что на Windows NT4 и Windows 2000/XP клавиша F12 зарезервирована для использования отладчиком в любое время, поэтому она не должна быть зарегистрирована как горячая клавиша.
Создание системной горячей клавиши с помощью Delphi для задачи глобального trapping клавиш.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.