Ich muss programmgesteuert ein Zeichen in eine Zelle eines Delphi-Rasters eingeben (in anderen Anwendungen).Tastatureingabe in Delphi mit WinAPI simulieren
Um dies manuell zu tun, sind folgende Schritte erforderlich:
- Drücken Sie die F3-Taste.
- Drücken Sie dreimal die rechte Pfeiltaste.
- Drücken Sie die Leertaste.
- Geben Sie den Buchstaben "E" auf der Tastatur ein.
Drücken Sie die Nach-rechts-Taste.
// Press F3 button keybd_event(VK_F3, 0, 0, 0); // Press right arrow key 3 times keybd_event(VK_RIGHT, 0, 0, 0); keybd_event(VK_RIGHT, 0, 0, 0); keybd_event(VK_RIGHT, 0, 0, 0); // Press the space button keybd_event(VK_SPACE, 0, 0, 0); // Type letter E keybd_event(Ord('E'), 0, 0, 0); // Move to the right keybd_event(VK_RIGHT, 0, 0, 0);
Aber es funktioniert nicht. Wenn ich diesen Code ausführe, scheint nichts zu passieren.
Wie soll ich diesen Code ändern, so dass er tatsächlich Benutzereingaben simuliert?
Ich habe etwas über ['virtuelle Tastatur'] (http://stackoverflow.com/a/12565963/960757) vor einiger Zeit gemacht (und es wird viele andere geben). Aber zu Ihrem Problem, wenn Sie auf TStringGrid zielen, denke ich, dass Sie nichts anderes tun können, als es zu fokussieren und Ihre Tastenanschläge zu simulieren (wenn ich mich recht erinnere, antwortet TStringGrid auf keine Art von Nachricht, die das würde in der Lage sein, den Text einer Zelle festzulegen). – TLama
In dieser speziellen Anwendung können Werte nur über die Tastatur in dieses Raster eingegeben werden. Ich habe dies bereits mit AutoHotKey und MS UI Automation gemacht, muss diesen Code nun aber in Delphi neu schreiben. –
Ich kann mich nicht darauf verlassen, dass das Raster fokussiert wird, da sich auf dem Zielsystem ein Programm befindet, das sich alle 200 Millisekunden selbst aktiviert. –