Handle eines child von nem child eines child bekommen ;)[gelöst]
-
Wie komme ich an das handle eines z.b. SysListView32 wenn es z.b. so aussieht:
Anwendung AfxMDIFrame42 AfxFrameOrView42 #32770 #32770 SysListView32so sieht die verschachtelung im winspector aus! kann ich in dem fall FindWindowEx anweisungen ineinander verschachteln oder wie sollte ich das anstellen?
-
ink3n schrieb:
kann ich in dem fall FindWindowEx anweisungen ineinander verschachteln
Genau

-
Neiiinn *Zitat: Homer Simpson

THX für die traurige Gewissheit

-
Für das Beispiel von Oben also so:?
hwnd=FindWindowEx(FindWindowEx(FindWindowEx(FindWindowEx(FindWindowEx(FindWindow("Anwendung",NULL),NULL,"AfxMDIFrame42",NULL),NULL,"AfxFrameOrView42",NULL),NULL,"#32770",NULL),NULL,"#32770",NULL),NULL,"SysListView32",NULL);//ohh
sry für das überschreiben der Fenstergrenze LOL
-
gut, ich dreh gleich durch... :gaga: würde sich bitte jemand mal an folgendem beispiel versuchen? ich bekomms nicht gebacken!

Anwendung AfxMDIFrame42 #32770 AfxMDIFrame42 #32770 AfxFrameOrView42 RichEdit20AHIIIIIIIIIIIIIIIIIIIILFEEEEEEE!
-
soa, ich lass jetzt die katze aus dem sack

http://temperature.gotdns.com/shot1.jpg
da liegt der screenshot von winspector, folgendes funktioniert ( im Bild blau markiert):
char buffer[4096*8]; ... child=FindWindowEx(FindWindowEx(FindWindowEx(FindWindowEx(FindWindowEx(FindWindow("Overnet",NULL),NULL,"AfxMDIFrame42",NULL),NULL,"#32770",NULL),NULL,"AfxMDIFrame42",NULL),NULL,"#32770",NULL),NULL,"RichEdit20A",NULL); if(child!=0) { SendMessage(child,WM_GETTEXT,4096*8-1,(long)&buffer[0]); String tmp = &buffer[0]; RichEdit1->Text=tmp; }else ShowMessage("Kein Handle");wenn ich das nun aber weiter verschachtel um das handle der roten markierung zu bekommen , gibt es kein handel... ich kann mir vorstellendas findwindowex sich daran aufhängt das es in der vorletzten ebene 2 mal den slben klassennamen gibt.
aber irgendwie muss man doch an das handle komen!
kann mir biiiiitte jemand helfen?
-
ich nehme an, du weisst wenn du beim HWND vom blauen angekommen bist, wieder zurück zum #32770 gehen musst.. dort aber das 2. Fenster von #32770 nehmen musst (mit FindWinndowEx den 2. parameter nutzen glaube ich) und dan erst über AfxFrame... und zu deinem roten gehen
-
jaja, soweit war mir das klar nur wenn ich jetzt angenommen bei #32770 bin:
FindWindowEx("hwnd von #32770","wie jetzt vom 2. fenster?","gesuchte klasse",NULL);also ich wieß nicht wie ich an das handel des 2. #32770 kommen soll! das ist ja kein child von #32770 sondern liegt auf der gleichen z ebene!
es gibt also 2 gleiche klassen auf der ebene und wie soll ich nun FindWindowEx klar machen welche er nehmen soll ??? Das ist meine Frage!

-
MSDN schrieb:
hwndChildAfter
[in] Handle to a child window. The search begins with the next child window in the Z order. The child window must be a direct child window of hwndParent, not just a descendant window.If hwndChildAfter is NULL, the search begins with the first child window of hwndParent.
Note that if both hwndParent and hwndChildAfter are NULL, the function searches all top-level and message-only windows.
hwndForm = FindWindow("TForm1",0); hwndEdit1 = FindWindowEx(hwndForm,0,"TEdit",0); hwndEdit2 = FindWindowEx(hwndForm,hwndEdit1,0,0);ist ungetestet.. probier mal, sollte funtionieren.. ich denke mal komentare zum code sind überflüssig..
BigNeal
-
alles klar! das wars!ich geh kaputt... ich bin aber auch ein schmalspurdenker..

-
habe mich vor kurzem auch damit auseinander setzen müssen.. aber msdn genau lesen nützt meistens
