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?'); //kann man das in C# transferieren?
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0'TConversationForm'nil);   //und
    wndChild := FindWindowEx(wndChild, 0'TChatEntryControl'nil);  //was
    wndChild := FindWindowEx(wndChild, 0'TChatRichEdit'nil);      //soll das?
    if wndChild <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
      FlashControl(wndChild);
      SetWinText(wndChild, 'text...'); //den Befehl gab es als einfügbare Option
    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! ;)


jaenicke - Mi 11.05.11 21:55

HWND ist einfach ein Handle eines windows. Das ist praktisch der Griff, an dem du das Fenster anfassen kannst um damit zu arbeiten. ;-)

Wie du FindWindow in C# benutzt, zeigt eine einfache Suche bei Google SUCHE BEI GOOGLE. ;-)
http://www.pinvoke.net/default.aspx/user32/findwindow.html


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 user profile iconjaenicke an. Das bringt dich im Moment eher weiter.