How to register system-level hotkeys in delphi
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 =class (TForm) procedure FormCreate (Sender: TObject); procedure FormDestroy (Sender: TObject); private procedure WMHotKey (var Msg: TWMHotKey);message WM_HOTKEY; {Private declarations} public {Public declarations} end ; var Form1: TForm1; implementation {$ R * .dfm} var HotKeyId:array [0..12] of Integer; // Array of hotkeys, here we are going to define 13 hotkeys procedure TForm1.FormCreate (Sender: TObject); var i: Integer; begin // Register hotkey for i: = Low (HotKeyId)to High (HotKeyId)do HotKeyId [i]: = GlobalAddAtom (PChar (IntToStr (i))); // Hotkey names are optional RegisterHotKey (Handle, HotKeyId [0],0, VK_F2); // F2 RegisterHotKey (Handle, HotKeyId [1],0, VK_UP); // Up RegisterHotKey (Handle, HotKeyId [2],0, VK_DOWN); // Down RegisterHotKey (Handle, HotKeyId [3],0, VK_LEFT); // Left RegisterHotKey (Handle, HotKeyId [4],0, VK_RIGHT); // Right RegisterHotKey (Handle, HotKeyId [5],0, VK_PRIOR); // PageUp RegisterHotKey (Handle, HotKeyId [6],0, VK_NEXT); // PageDown RegisterHotKey (Handle, HotKeyId [7],0, VK_OEM_PLUS); // + RegisterHotKey (Handle, HotKeyId [8],0, VK_OEM_MINUS); //- RegisterHotKey (Handle, HotKeyId [9],0,$ 31); // 1 RegisterHotKey (Handle, HotKeyId [10],0,$ 41); // a RegisterHotKey (Handle, HotKeyId [11],0, VK_RETURN); // Enter RegisterHotKey (Handle, HotKeyId [12], MOD_CONTROL, VK_RETURN); // Ctrl + Enter end ; // hotkey procedure TForm1.WMHotKey (var Msg: TWMHotKey); begin if Msg.HotKey = HotKeyId [0] then ShowMessage ('F2'); if (Msg.HotKey = HotKeyId [1]) then ShowMessage ('Up'); if (Msg.HotKey = HotKeyId [2]) then ShowMessage ('Down'); if (Msg.HotKey = HotKeyId [3]) then ShowMessage ('Left'); if (Msg.HotKey = HotKeyId [4]) then ShowMessage ('Right'); if Msg.HotKey = HotKeyId [5] then ShowMessage ('PageUp'); if Msg.HotKey = HotKeyId [6] then ShowMessage ('PageDown'); if Msg.HotKey = HotKeyId [7] then ShowMessage ('+'); if Msg.HotKey = HotKeyId [8] then ShowMessage ('-'); if Msg.HotKey = HotKeyId [9] then ShowMessage ('1'); if Msg.HotKey = HotKeyId [10] then ShowMessage ('a'); if Msg.HotKey = HotKeyId [11] then ShowMessage ('Enter'); if Msg.HotKey = HotKeyId [12] then ShowMessage ('Ctrl + Enter'); end ; procedure TForm1.FormDestroy (Sender: TObject); var i: Integer; begin // Logout hotkey for i: = Low (HotKeyId)to High (HotKeyId)do begin UnRegisterHotKey (handle, HotKeyId [i]); GlobalDeleteAtom (HotKeyId [i]); end ; end ; end .