Wie kann ich die send-Taste gedrückt, um einen Laufenden Prozess-Objekt?
Ich versuche C# eine Anwendung starten (in diesem Fall open office), und beginnen Sie, die Anwendung Tastendrücke, so dass es scheint, als ob jemand mit der Eingabe. Also im Idealfall würde ich in der Lage sein zu senden, eine mit open office Prozess der Tastendruck für den Buchstaben "d", und open office würde dann d auf dem Papier. Kann mir jemand die Richtung nach, wie dies angehen? Ich habe versucht, Folgendes zu tun:
p = new Process();
p.StartInfo.UseShellExecute = true;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.FileName = processNames.executableName;
p.Start();
p.StandardInput.Write("hello");
Aber will mich nicht den gewünschten Effekt - ich sehe nicht den eingegebenen text in open office.
- möglich, Duplikat der stackoverflow.com/questions/1012616/c-sendkeys-send
- Ich weiß, Sie bat für C#, aber möchten Sie vielleicht einen Blick auf AutoHotkey. Auch wenn Sie nicht verwenden können, es für dieses spezielle problem es ist ein großartiges Werkzeug, zum im Verstand zu halten, die für diese Art von Aufgabe.
- Es ist nicht ein Duplikat des oben genannten Frage, weil seine target-Fenster nicht .Net-Anwendung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie dies über Win32 sendmessages: Die grundlegende Idee ist wie diese:
Faust, müssen Sie einen Zeiger auf die gestartete Prozess Fenster:
dann SendMessage oder PostMessage (bevorzugt in Ihrem Fall vermute ich mal):
http://msdn.microsoft.com/en-us/library/ms644944(v=VS.85).aspx
In dieser Nachricht geben Sie die richtige Art der Meldung (z.B. WM_KEYDOWN) zu senden Tastendruck:
http://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx
Haben Sie einen Blick auf PInvoke.net zu bekommen PInvoke sourcecode.
Alternativ können Sie folgende Tastaturbefehle verwenden.Senden (.Net) Methode, nach der Verwendung von FindWindow zu bringen, dass Fenster in den Vordergrund. Aber das ist etwas unzuverlässig.
Ich Tat dies mit SetForegroundWindow und SendKeys.
Ich benutzte es für diese.
Dies kann verwendet werden, so einfach wie diese.
StartInfo.RedirectStandardInput
undproc.StandardInput.WriteLine("S")