Wie kann man einen Tastendruck an ein anderes Fenster schicken?


Dazu benötigt man das Handle des Fensters und schickt an dieses dann zwei Nachrichten: WM_KeyDown und WM_KeyUp. Im folgenden Beispiel wird im Fenster "Form1" das Menü mit der Taste F10 aktiviert:

  var  W : HWnd;

  begin
     W := FindWindow(NIL,'Form1'); //"Form1" heißt hier das Fenster mit dem Menü
     if W <><> 0 then begin
       PostMessage(W, wm_KeyDown, vk_F10,0);   //Simuliert F10
       PostMessage(W, wm_KeyUp, vk_F10,0);       
     end;
  end;

Eine andere Alternative ist die systemweite Versendung von Tastaturereignissen mit Keybd_Event. Mit dieser Funktion kann man auch Tastenkombinationen verschicken. Im folgenden Beispiel von Ralf Imhäuser ist es die Tastenkombination [Shift-Tab]:

  Keybd_Event(vk_Shift,0,0,0);
  Keybd_Event(vk_Tab,0,0,0);
  Keybd_Event(vk_Tab,0,KEYEVENTF_KEYUP,0);
  Keybd_Event(vk_Shift,0,KEYEVENTF_KEYUP,0);
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:

Wie bekomme ich Zugriff auf alle geöffneten Fenster?


Delphi FAQ