Autor Beitrag
Dominikdak
Hält's aus hier
Beiträge: 6

Win Vista
C#
BeitragVerfasst: Mi 11.05.11 17:04 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
www.delphi-forum.de/viewtopic.php?t=21271
Dominikdak Threadstarter
Hält's aus hier
Beiträge: 6

Win Vista
C#
BeitragVerfasst: 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)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. ;-)
www.pinvoke.net/defa...er32/findwindow.html
Dominikdak Threadstarter
Hält's aus hier
Beiträge: 6

Win Vista
C#
BeitragVerfasst: Mi 11.05.11 22:33 
Ok,
das Handle hab ich jetzt. Welche Möglichkeiten erschließen sich jetzt damit? (Googlen = null :D)


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.