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 .