2010-12-27 17 views
8

Wie kann ich mit C# oder C++ Text in das Textfeld einer anderen Anwendung einfügen? Ich tat dies vor langer Zeit und schien sich an etwas über die Verwendung der Anwendungen HWND zu erinnern. Aber seit dieser Änderung für jede Instanz der Anwendung fühle ich, dass ich mich nicht an die komplette Geschichte erinnere. Bekomme ich irgendwie eine Liste laufender Apps, entpacke die eine, die ich will, besorge mir die HWND und dann ... hmm .... was dann? :)Text in das Textfeld einer anderen Anwendung einfügen

Antwort

11

Verwendung zu erreichen FindWindowEx() den Griff zu finden (HWND) und dann die WM_SETTEXT Nachricht SendMessage()

mit schicken Wenn Sie FindWindowEx verwenden, müssen Sie zuerst das Hauptfenster-Handle finden, indem Sie seinen Klassennamen verwenden. Dann müssen Sie nach dem Handle des Containers suchen, in dem sich die Textbox befindet, indem Sie FindWindowEx aufrufen, das Handle des übergeordneten Elements (das Fenster) und den Klassennamen des Containers übergeben. Sie müssen dies wiederholen, bis Sie die Textbox erreichen. Sie können ein Tool namens Spy++ verwenden, das standardmäßig mit Visual Studio installiert wird, um die Zielanwendung zu überprüfen und die Containerhierarchie zu ermitteln (alle Objekte werden in der API als Fenster bezeichnet, aber ich nenne sie Container im Gegensatz zu den oberen Level-Fenster) mit ihren Klassennamen.

+0

auch anstelle von Codeausführung Handhabung, können Sie einen Anruf zu InvalidateRect hinzufügen müssen als Sendmessage es ändern würde, und ich würde den Wert in Winspector aber der Wert auf meiner Form gleich geblieben sehen , so dass InvalidateRect das Repaint verursacht –

+0

Was, wenn die Anwendung mehr als ein Textfeld enthält und ich die Daten aus einem bestimmten Textfeld lesen möchte. Gibt es eine Möglichkeit, den Handler von Textfeldern zu unterscheiden? – MK446

3

Dann Sendmessage(), WM_SETTEXT

-1

Sie Clipboard-Klasse verwenden können, die gleiche

+0

aber dies wird Benutzer beinhalten – RvdK

-2

Anstatt auf eine bestimmte App zu zielen, könnten Sie einfach Tastenanschläge an das Textfeld senden.

private void button1_Click(object sender, EventArgs e) 
    { 
     System.Threading.Thread.Sleep(5000); 
     SendKeys.Send(send_text); 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     send_text = textBox1.Text;    
    } 
+0

Bitte fügen Sie einige Erklärungen hinzu – CodeWarrior