Auf den Shortcut reagieren


Hierfür ziehen wir die Nachricht "WM_COMMAND" heran, bei der im höherwertigen Wort (dem Benachrichtigungscode) von wParam eine Eins zu finden ist, wenn ein Shortcut aktiviert wurde. Die Abfrage ist daher:

WM_COMMAND:
  case HIWORD(wp) of
    1: { Eins = Shortcut aktiviert }
      case LOWORD(wp) of
        IDC_ACCEL_CLOSE:
          SendMessage(wnd, WM_CLOSE, 0, 0);
        IDC_ACCEL_SC:
          Messagebox(wnd, 'Strg+S gedrückt', 'Shortcut', MB_ICONINFORMATION);
      end;
  end;

Erweiterung der Nachrichtenschleife des Programms

Damit unser Programm tatsächlich auf die Shortcuts reagieren kann, ist die Funktion TranslateAccelerator notwendig, die wir in unsere Nachrichtenschleife einfügen. Diese Funktion übersetzt "WM_KEYDOWN"- und "WM_SYSKEYDOWN"-Nachrichten in "WM_COMMAND"- oder "WM_SYSCOMMAND"-Nachrichten und sendet diese dann an die Nachrichtenfunktion ("WndProc") unseres Fensters. Wenn die Funktion Null zurückliefert, dann sollte die Standard-Nachrichtenverarbeitung ausgeführt werden:

while(GetMessage(msg, 0, 0, 0)) do
begin
  if(TranslateAccelerator(hWndMain, hAccelTbl, msg) = 0) then
  begin
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
end;