Einen Public Hotkey benützen

Erklärung
Ganz heiße Sache:
Mit diesem Code kann man sich einen Hotkey reservieren... Wann immer dieser Button gedrückt wird, so wird das Programm benachrichtigt(Auch wenn das Programm nicht den Focus hat).

Der Rest steht im Quelltext... :-)

Eine noch heißere Sache:
Einfach eine von mir geschriebene Komponente(KeyHot) runterladen. Mit ihr lassen sich alle hier angesprochenen Aufgaben ganz locker lösen.
 

Quelltext
Wichtig: in die Uses-Klausel menus aufnehmen
  Schritt1
  Zu allererst müssen wir uns bei Windows registrieren lassen und Windows sagen, bei welchem Key Windows uns
  benachrichtigen soll. 

  //Öffentliche Variable 
  var Hotkey: integer; 

  procedure TForm1.Button1Click(Sender: TObject); 
  begin
   //Wir müssen uns eine ID holen 
   HotKey := GlobalAddAtom(PChar('Shortcut')); 
   {Jetzt können wir uns registrieren lassen 
   indem wir diese Funktion aufrufen. 
   Der Hotkey ist in diesem Fall in einer THotkey Komponente} 
   RegisterShortCut(Hotkey1.HotKey); 
  end

  procedure TForm1.RegisterShortCut(HKey: TShortCut); 
  var
    fuModifiers : Cardinal; 
    Key: Word; 
    Shift: TShiftState; 
  begin
    //Diese Funktion verarbeitet den Hokey und startet dann die Api 
    fuModifiers := 0; 

    //Erstmal den Shortcut zerteilen 
    ShortCutToKey(HKey, Key, Shift); 

    //Ist <Strg> enthalten ? 
    if  ssCtrl in Shift then 
       fuModifiers := MOD_CONTROL; 
    //Ist <Shift> enhalten ? 
    if ssShift in Shift then 
       fuModifiers := fuModifiers or MOD_SHIFT; 
    //Ist <Alt> enthalten ? 
    if ssAlt in Shift then
       fuModifiers := fuModifiers or MOD_ALT; 

    //Windows Api-Funktion aufrufen 
    RegisterHotKey(Handle,HotKey,fuModifiers, Key); 
  end

  Soweit alles kapiert ? Gut :-) Dann gehen wir weiter zu Schritt2... 
 

 
  Schritt2
  Jetzt haben wir Windows gesagt wir wollen benachrichtigt werden wann immer der bestimmte Button gedrückt wurde, aber
  wie verarbeiten wir jetzt diese Message ? Das geht folgendermaßen: 

  ... 
  private
      { Private-Deklarationen } 
    //Diese Funktion oben in die Deklaration stecken 
    procedure HotkeyProc(var Msg: TWmHotkey); message WM_HOTKEY; 
    {message WM_HOTKEY heißt, dass diese Funktion immer gestartet werden soll 
    wenn unser Programm von Windows die WM_HOTKEY message empfängt.} 
  ... 
end; 

  ... 

  procedure TForm1.HotkeyProc(var Msg: TWmHotkey); 
  begin
  //Diese Funktion reagiert nun auf den Tatendruck
  if MSG.HotKey = Hotkey thenBegin
     showmessage('Hey, du hast die HotKey-Taste(n) gedrückt!!!'); 
     //Hier jetzt reinschreiben was passieren soll 
     Funktion... 
     end
  end

 

 
Schritt3
  Eigentlich sind wir jetzt fertig, aber wir müssen noch ein bißchen "aufräumen" wenn wir unser Programm beenden: 

  procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
  begin
    //Proc ausführen um Aufzuräumen (schon von uns vordefiniert, wie unten zu sehen) 
    UnRegisterShortCut; 
  end

  procedure TForm1.UnRegisterShortCut; 
  begin
    //Sie müssen noch diese Funktion einfügen (auch wieder im Private-Teil deklarieren) 
    UnRegisterHotkey(Handle, HotKey); 
    GlobalDeleteAtom(HotKey); 
  end

  Immer noch alles klar ? Nein? Wenn nicht, dann empfehle ich dir die Komponente herunterzuladen und zu benutzen :-) 
  Und ganz wichtig: <strg><b> drücken um diese Seite zu den Bookmarks hinzuzufügen.