Entwickler-Ecke
C# - Die Sprache - Kommunikation zwischen 2 sich unbekannten Programmen?
Dominikdak - Mi 11.05.11 17:04
Titel: Kommunikation zwischen 2 sich unbekannten Programmen?
Hi Forum!
Ist es möglich (und wenn wie), dass ich zB in die Textbox eines Programms (Browser, Chat etc.) mit einem selbst geschriebenen Programm etwas hineinschreiben kann?
Kleine Anfängerfrage ;D
Danke!
jaenicke - Mi 11.05.11 17:32
Hallo und :welcome:
Das kommt darauf an. Wenn das entsprechende Textfeld ein Handle hat, kannst du es mit FindWindow finden. In einem Browser ist das nicht der Fall, da könntest du nur die Tastatureingaben an das Fenster schicken, weißt aber nicht wo die landen. Deshalb ist da ein Addon für den Browser sinnvoller.
Details zu einem Control kannst du mit WinSpy finden:
http://www.delphi-forum.de/viewtopic.php?t=21271
Dominikdak - Mi 11.05.11 21:43
Hi und Danke schonmal!
Mit WinSpy hat das alles geklappt, ich konnte mit dem Delphi-Programm in ein Textfeld eines beliebigen Programmes etwas hineinschreiben.
Jetzt zur Vertiefung: (ich poste erstmal das Skript)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var wndMain, wndChild: HWND; begin wndMain := FindWindow('tSkMainForm','Fenstername?'); if wndMain <> 0 then begin wndChild := FindWindowEx(wndMain, 0, 'TConversationForm', nil); wndChild := FindWindowEx(wndChild, 0, 'TChatEntryControl', nil); wndChild := FindWindowEx(wndChild, 0, 'TChatRichEdit', nil); if wndChild <> 0 then begin ShowMessage('Window Handle: ' + IntToStr(wndChild)); FlashControl(wndChild); SetWinText(wndChild, 'text...'); end; end; end. |
Ich habe keine Ahnung von Delphi und nur grobe Verständniszüge. Ich nehme an, FindWindow gib es auch für C#, welche Funktion hat HWND und welche Rolle spielen die Handles? Und mit welchem Befehl kann man, wenn man das Fenster gefunden hat, etwas in die darin befindliche Textbox schreiben (SetWinText?)?
Fragen über Fragen, ich hoffe ihr könnt mir helfen! ;)
Dominikdak - Mi 11.05.11 22:33
Ok,
das Handle hab ich jetzt. Welche Möglichkeiten erschließen sich jetzt damit? (Googlen = null :D)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void button1_Click(object sender, EventArgs e) { Process[] processes = Process.GetProcessesByName("notepad ..."); if (processes.Length == null) MessageBox.Show("f***");
foreach (Process p in processes) { IntPtr pFoundWindow = p.MainWindowHandle; MessageBox.Show("hallo"); } } |
Danke!
Ralf Jansen - Mi 11.05.11 22:49
Zitat: |
das Handle hab ich jetzt. Welche Möglichkeiten erschließen sich jetzt damit? |
Mit dem konkreten Handle das du durch den gezeigten Code bekommst vermutlich gar nichts. Du brauchst das Handle der TextBox nicht das der Form auf dem die TextBox liegt. Wenn denn Process.MainWindowHandle überhaupt das erwartete oder richtige liefert. Nicht jede Anwendung hat ein Fenster das sich eindeutig als das MainWindow identifizieren lassen könnte). Sieh dir lieber den Link zu PInvoke.Net von
jaenicke an. Das bringt dich im Moment eher weiter.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!