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
         SysListView32
    

    so 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
          RichEdit20A
    

    HIIIIIIIIIIIIIIIIIIIILFEEEEEEE!



  • 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 😉


Anmelden zum Antworten