Senden eines Tastenanschlags an eine andere Anwendung unter Verwendung von WinAPI

Ich muss eine andere Anwendung steuern, indem ich Tastatureingaben an sie wie folgt sendeSTRGS oderSTRGVERSCHIEBUNGC oderSTRGF.

Ich habe viele Dinge ausprobiert, aber ich kann es nicht zum Laufen bringen. Also versuche ich, dies in einem einfacheren Fall richtig zu machen.

Dies wird erfolgreich gesendetHey zum Merkzettel:

procedure TForm1.Button1Click(Sender: TObject);
  var notepad, edit: HWND;
begin
  notepad := FindWindow('notepad', nil);
  edit := FindWindowEx(notepad, FindWindow('Edit', nil), nil, nil);

  SendMessage(edit, WM_CHAR, dword('H'), 0);
  SendMessage(edit, WM_CHAR, dword('e'), 0);
  SendMessage(edit, WM_CHAR, dword('y'), 0);
end;

Und das schickt die erfolgreichF5 Schlüssel zum Notizblock, und funktioniert auch mitF3 Das Dialogfeld "Suchen" wird geöffnet.

notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_F5, 0);
PostMessage(notepad, WM_KEYUP, VK_F5, 0);

Aber ich weiß nicht warumSendMessage funktioniert im obigen Beispiel nicht.

Das Beste, was ich finden konnte, war so etwas, was nichts bringt.

notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(notepad, WM_KEYDOWN, VkKeyScan('F'), 0);
PostMessage(notepad, WM_KEYUP, VkKeyScan('F'), 0);
PostMessage(notepad, WM_KEYUP, VK_CONTROL, 0);

Ich habe hier irgendwo eine Bibliothek gefunden, die irgendwie die VBScript-Sendeschlüsselfunktionen emuliert, aber wenn man nur den Code betrachtet, scheint sie nur Schlüssel an die aktuelle Anwendung oder alle Anwendungen zu senden, da es keinen Handle-Parameter gibt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage