Komponenten von fremder Application herausfinden ?
-
Wenn ich ein Fenster habe also das Handle einer fremden Application
HWND hwnd = GetForegroundWindow();Kann man sich die Componenten (zb.: TEdit, TForm) die auf hwnd liegen
irgendwie zurückgeben lassen ? (also die Namen als String zurückgeben) ?Ich wollte eigentlich Fragen ob das möglich ist ?
Würde mich über eine kleine Hilfe freuen.bis bald
-
Geht (sofern Du die Klassen deuten kannst) mit: GetWindow + GetClassName.
-
oder mit Classname und FindWindowEx
greetz KN4CK3R
-
Sucht denn "FindWindowEx" im jeweiligen Fenster nach vorhandene Komponenten ?
hab nich so die Ahnung aber daran solls ja nich scheitern
?
-
FindWindowEx hilft Dir nicht, wenn Du nicht schon was weißt...

-
bin ein Schritt weiter:
Als Ausgabe bringt die Message "MozillaUIWindowClass".
HWND w=FindWindowEx(NULL, NULL, NULL, NULL); char TName[512]; while(w) { GetWindowText(w, TName, 512); if(strstr(TName, "Mozilla")) { GetClassName(w,TName, 512); ShowMessage(TName); } w=GetNextWindow(w, GW_HWNDNEXT); }Bei mspaint.exe kam MSPaintApp heraus.
Bei cdplayer.exe kam MMFRAME_MAIN heraus.Wie kann ich nun aber TButton oder TEdit Komponenten in diesem Fenster finden ?
-
Dann musst Du mit GeWindow in die Childwindows reinsuchen.
BTW: Was sollen TEdit und TButton sein? Ich ahne, dass es aus den Borland Libraries kommt. Unter Windows gibt es nur allgemeine Fensterklassen oder eben privat registrierte.
Verwende mal Spy++ (Wenn Du dieses MS Tool hast) und schau Dir die Strkturen mal an.
-
Ok habe mir X-Spy gezogen (Spy++ habe ich nicht), kommt genial das Teil.
Ich dachte aber immer was scheinbar nicht geht das ich von einer fremden Anwendung
die 2 Edit-Felder besitzt ich diese genau identifizieren kann um dann einfach an jedes einen ganz bestimmten Text senden kann. Oder gibts da ne Reihenfolge die immer eingehalten wird so das da nie was schieflaufen kann ? Woher weiss ich welches Edit-Fenster welche ControllID hat da sich diese ja jedesmal ändert ?
-
Der Programmierer bestimmt, welches Fenster welche ID besitzt. Spy++ kann diese lediglich anzeigen. Keiner garantiert die Reihenfolge. Wenn der Programmierer meint, in einem Update die IDs ändern zu müssen, dann macht er es eben. Es ist Deine Sache dafür zu sorgen, dass Du auch die richtigen erwischt.
-
OK, alles klar ich muss zugeben mir war das alles überhaupt nicht bewusst.
Wusste nicht wie kompliziert diese Sache sein kann da in all meinen Anwendungen
die ControlID bei jedem Programm-Neu-Start eine andere ist. (X-Spy zeigt mir das)ABER
In Anwendungen wie "calc.exe" zum Beispiel ist diese ControlID vom Edit-Feld immer die selbe.
calc.exe = 403 (sagt X-Spy)
Wie man so eine ID beim Programmieren vergibt weiss ich gar net.
1.Kann man die einfach mit SetDlgItem vergeben ?
2.Geht das auch bei nicht zur Laufzeit erstellten Komponenten ?
3.Welchen Nachteil hat denn so eine Nicht-ID-Vergabe noch ?Ich hoffe das ich EUCH nich aufn Sack gehe ?
bis denne
-
Igor_911 schrieb:
Wie man so eine ID beim Programmieren vergibt weiss ich gar net.
1.Kann man die einfach mit SetDlgItem vergeben ?
2.Geht das auch bei nicht zur Laufzeit erstellten Komponenten ?
3.Welchen Nachteil hat denn so eine Nicht-ID-Vergabe noch ?Diese IDs werden beim Erzeugen eines Fensters vergeben. Meistens sind diese vom Programmierer fest vorgegeben. Aber es gibt auch Methoden für eine dynamische Verwaltung.
zu 1. Nein!
zu 2. Es gibt nur Fenster, die zur Laufzeit erstellt werden!
zu 3. Man braucht keine ID, wenn man über das Handle grundsätzlich zugreift.Ich würde sagen, dass DU mit diesen Fragen erst mal ein Winddows Tutorial durchgehst.

-
Ja kannst Du mir mein gutes Fenster Tutorial empfehlen
(mit ID-Vergabe)