Geschrieben von afixl am 02.06.2005, 14:57

In der Windows-API gibt es Funktionen, um Fenster
anderer Programme zu steuern.

Anhand eines Beispieles (in C) möchte ich zeigen, wie man Text in ein fremdes EDIT - Feld schreiben kann.

HWND ZielFenster,ZielFensterElement,hThis;
DWORD h1,h2,This,Other;
char wtext[255];

//Zuerst brauchen wir den "Handle" des Fensters.
ZielFenster= GetForegroundWindow(); // liefert den //Handle des Fensters, das gerade im Vordergrund //ist
//Eine ander Möglichkeit ist: GetWindow(hThis,GW_HWNDFIRST).

GetWindowText(ZielFenster,wtext,255); // gibt den //Titel eines Fensters zurück(z.B. "Editor" oder //"Winword"...)

//Wir brauchen die ThreadID des eigenen Fensters
This=GetCurrentThreadId();
h1=GetWindowThreadProcessId(hThis,&This); //hThis ist der Handle des eigenen Fensters

//und die ThreadID des Ziel-Fensters
h2=GetWindowThreadProcessId(GetForegroundWindow(),&Other);

//Nun verbinden wir die beiden Input Mechanismen //der beiden Fenster
AttachThreadInput(h2,h1,TRUE);

//GetFocus liefert den Handle des Elements im //Tastaturfukus zurück. (sollte ein Edit-Feld sein, funktioniert aber auch mit Buttons)
ZielFensterElement = GetFocus();

//Nun können wir Text in das EDIT - Feld kopieren
char text[255];

strcpy(text,"test");
SendMessage(ZielFensterElement ,WM_SETTEXT ,0,(LPARAM) (LPCSTR)text);

//Zum Schluss den Inputmechanimus wieder lösen
AttachThreadInput(h2,h1,FALSE);

Weitere Beispiele:

//Einen OK Button klicken
SendMessage(ZielFenster ,WM_COMMAND,IDOK,0);

//Ein anderes Fenster schliessen
SendMessage(ZielFenster,WM_CLOSE,0,0);

Diese Funktionen lassen sich einsetzen um, z.B. Passworteingaben zu automatisieren, OK-Boxen automatisch wegzuklicken uvm.
Etwas Kreativität ist natürlich gefragt, um die richtigen Window - Handles zu bekommen.

Bewertung Anzahl
6
50,0 %
2 Bewertungen
5
50,0 %
2 Bewertungen