Senden Tastendruck zu einer anderen Anwendung mithilfe der WinAPI
Habe ich zur Kontrolle eine andere Anwendung, indem Sie Tastenanschläge, um es wie STRGS oder STRGSHIFTC oder STRGF.
Ich habe versucht, eine Menge Dinge, aber ich nicht bekommen kann es arbeiten. Also ich versuche, dieses Recht auf einen einfacheren Fall.
Diese erfolgreich sendet Hey
auf dem 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 dies erfolgreich, sendet die F5 - Taste, um den Editor, und funktioniert auch mit F3 poping bis Sie das Dialogfeld Suchen.
notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_F5, 0);
PostMessage(notepad, WM_KEYUP, VK_F5, 0);
Aber ich weiß nicht, warum SendMessage
funktioniert nicht auf dem Beispiel oben.
Das beste was ich tun konnte, war so etwas wie dieses, die tut nichts.
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 gefunden habe hier irgendwo eine Bibliothek, die irgendwie emulieren das VBScript senden-Taste Funktionen, aber gerade auf der Suche den code, scheint es nur broadcast-Tasten, um die aktuelle Anwendung oder alle Anwendungen, da es keine Handle-parameter.
InformationsquelleAutor Vitim.us | 2013-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warnung: Dieser Methode hängt von Einzelheiten der implementation und sollte nicht verwendet werden, wenn Sie garantieren müssen, die Richtigkeit des Programms. (Auf der anderen Seite, sind Sie bereits auf diesem Weg. Zum Beispiel, wenn ich mich Recht erinnere, in Windows 95 gibt es nicht einmal eine
Go to
dialog.)Öffnete ich
notepad.exe
in meiner Lieblings-Ressourcen-Editor, und untersucht die Menüleiste. Ich bemerkte, dass die ID desSave
Menüpunkt ist3
. Also, der folgende code führt dieSave
Menü-Befehl im Editor:Ebenso
Find
ist21
in meiner version vonnotepad.exe
.Go to
ist24
.Update, laut Kommentar:, Wenn Sie benötigen, senden Sie Strg+Taste verwenden, können Sie
SendInput
:OK, ich sehe. Vielleicht
SendInput
arbeiten kann?Dort sind "alte" Versionen von Delphi nicht unterstützen
absolute
? Ich dachte, das war geerbt von Borland Pascal.Mein Verständnis ist, dass es eingeführt wurde Delphi 2009, aber anscheinend David widerspricht auf. Ich Schätze, ich war falsch.
Ja, das war es, was ich suchte.
InformationsquelleAutor Andreas Rejbrand
Habe ich mit keybd_event für Alter. Es funktioniert immer, auch wenn alles andere fehlschlägt, weil es füttert den Eingang direkt in die Schnittstelle zwischen den Tastatur-Treiber und Windows. Es gibt wirklich keinen Unterschied zwischen manuell eingeben und generieren von Schlüsseln mit der Funktion unten. Einzige Nachteil ist, dass das Ziel-Fenster muss immer im Vordergrund bleiben.
Spiele sind vielleicht nicht immer reagieren zu SendMessage (), so dass eine untere-level-Funktion erforderlich ist. Ich nahm SendInput ist ein higher-level-Funktion SendMessage(). Ich stehe korrigiert.
InformationsquelleAutor Martin