Jak zarejestrować skrót klawiaturowy dla całego systemu

Adam Boduch

Czasami chcielibyśmy, aby skrót klawiatury był skojarzony z naszą aplikację - np. po kliknięciu kombinacji: Ctrl + F10 nasza aplikacja ma wykonywać jakąś czynność.
Najpierw w procedurze "OnCreate" należy wpisać:


{ Ta funkcja rejestruje skrót: Ctrl + F4 dla naszej aplikacji }
  RegisterHotKey(Form1.Handle, $0001, MOD_CONTROL,  VK_F4);
{Teraz w procedurze "OnClose" musisz wpisać:}

{ zwolnienie skrotu w systemi }
UnregisterHotKey(Form1.Handle, $0001);

No i w końcu deklaracja samej obsługi skrótu. W sekcji "private" dopisz taką linie:

   procedure wm_HOTKEY(var Msg:TMessage);message WM_HOTKEY;
{Jest to komunikat "przechwytujący" skróty klawiaturowe. Najedź na niego kursorem myszy i wciśnij: Ctrl + Shift + C. Wpisz taką deklarację procedury:}

  if Msg.WParam = $0001 then
  { reakcja na skrót klawiszowy }
  Application.Restore; // przywrócenie aplikacji 

2 komentarzy

co sie ma dziac po tej kombinacji? bo mi nic sie niedzieje
wpisuje taki kod:

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle, $0001, MOD_CONTROL, VK_F4);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Form1.Handle, $0001);
end;

procedure TForm1.wm_HOTKEY(var Msg: TMessage);
begin
if Msg.WParam = $0001 then
Application.Restore;
end;

end.

Mam problem, jak wcisnę CTRL + SHIFT + C to się nic nie dzieje.