Auf den Hotkey reagieren


Wenn der Anwender den Hotkey betätigt, löst das System die Nachricht "WM_HOTKEY" aus, die wir in unserem Programm bearbeiten. Im Parameter wParam steckt dabei die ID des Hotkeys, die wir bei der Registrierung festgelegt haben. Die Funktion lautet also ganz einfach nur:

WM_HOTKEY:
  if(wp = hk_Id) then
    MessageBox(0,'Sie haben den Hotkey ausprobiert',@szClassname[1],MB_OK);

Auf die gleiche Weise können Sie weitere Hotkeys abfragen.


Machen wir noch ein kleines Beispiel: Vielleicht kennen Sie die Funktion von Windows XP, die es Ihnen erlaubt, sich mit der Windows-Taste und L abzumelden. Ich bin nicht ganz sicher, ob Sie dazu die Powertoys installieren müssen oder ob die Funktion bereits eingebaut ist. Wir wollen sie für Windows 9x/ME einfach mal nachbilden.
Dazu müssen wir zuerst herausfinden, welches Betriebssystem aktiv ist. Wir benutzen deshalb "GetVersionEx". Diese Funktion erwartet von uns das TOSVersionInfo-Record, das wir vorher mit der Größenangabe initialisieren müssen:

wv.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
GetVersionEx(wv);


Von Interesse ist für uns der Wert von dwPlatformId, für den das System vordefinierte Konstanten bereithält. In unserem Fall heißt das:

if(wv.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS) then
  RegisterHotKey(wnd,LogOff_Id,MOD_WIN,WORD('L'))


Angenommen, Sie wollen diesen Hotkey auch für Windows NT und 2000 registrieren, dann müssten Sie zusätzlich die Konstante VER_PLATFORM_WIN32_NT und die Versionsnummer berücksichtigen:

WinNT := (wv.dwPlatformId = VER_PLATFORM_WIN32_NT) and
         (wv.dwMajorVersion <= 4);
Win2k := (wv.dwPlatformId = VER_PLATFORM_WIN32_NT) and (wv.dwMajorVersion = 5) and (wv.dwMinorVersion = 0); // XP = 5.1


Nachdem wir den Hotkey definiert haben, schreiben wir nun den Code für seine Aktion. Wie gesagt, er soll den Benutzer abmelden:

WM_HOTKEY:
  if(wp = LogOff_Id) then
  begin
    SendMessage(wnd,WM_CLOSE,0,0);
    ExitWindowsEx(EWX_LOGOFF,0);
  end;