wie funktioniert EnumChildWindows?



  • HWND hwnd = 0;
    EnumChildWindows(hparent, enumchildproc, reinterpret_cast<LPARAM>(&hwnd));
    

    Und jetzt darfst du 1x raten wie dann der Code in enumchildproc dazu aussehen sollte 😉





  • Martin, deine Bsp mit getwindow haben gut funktioniert, ich habe sie auch benutzt, nur möchte ich diese callbacks verstehen

    Hustbaer, google sagt zu reinterpret cast es sein ein "mächtiger" cast, bitte berichtigt mich, aber lparam ist ein 4byte int und long 8byte kann es da nicht probleme geben?

    MrC diese bsp habe ich mir auch angesehen. Meist wird in enumchildprog nur der handle ausgegeben o.ä. ich möchte aber die handles zurückgeben zur main und sie in einem array speichern zB.

    Mir ist auch nicht klar wieso man enumchildproc keine Argumente übergeben muss.



  • LPARAM ist ein LONG_PTR, also ein integral mit derselben größe wie ein zeiger.



  • Grundlagen, mist 🙄


  • Mod

    EnumChildWindow kann Benutzerdaten in Form eines Zeigers bekommen.
    Wenn das also ein Zeiger auf einen Array ist, kann EnumCHildWindow alle Daten dort entsprechend ablegen.

    Alle solche Callback Funktionen verfügen über irgendeine Form von Handle oder LPARAM, mit dem man einen Zeiger weitergeben kann.



  • Dummbrot mein link war nur Ansatz zum Ziel. Mit Arrays solltest du alleine hin bekommen. In enumproc handle ubergeben ?? Hmm, du kannst in enumproc handles in arrays packen.



  • ich bekomme es nicht hin 😡

    diesmal nicht mit enumchildwindows sondern mit enumwindows. Vielleicht kann mir jemand nochmal den Ablauf erklären 🙄

    EnumWindows(EnumWindowsProc,reinterpret_cast<LPARAM>(&param));
    

    Enumproc wird ohne Argumente aufgerufen(warum auch immer), obwohl es einen HWND und LPARAM als Argument benötigt, beide werden byvalue aufgerufen, also ist nichts mit zurückgeben irgendwelcher Werte aus Enumproc.
    Das zweite Argument von EnumWindows ist ein LPARAM der so wie Martin meint zum Sammeln der Handles da wäre, nur ist der Wert immer unverändert bei mir. Ich weis nicht wie ich ihm anweisen kann dort die Handles abzulegen.

    mir scheint als wenn keiner bei google oder hier in der Suche sowas gemacht hat, in den Bsp werden die LPARAMs nie benutzt.

    #Frust



  • HWND param;
    EnumWindows(EnumWindowsProc,reinterpret_cast<LPARAM>(&param));
    
    int _stdcall EnumWindowsProc(HWND hwnd, long lParam){
    
    	wchar_t buf[200]={0};
    	lParam=(long)hwnd;
    	GetWindowText(hwnd,buf,199);	
    	printf("hwnd: %X    lParam: %d     Title: %ls\n",hwnd,lParam,buf);
        return 1;
    }
    

  • Mod

    lParam ist ein Zeiger. Also benutze ihn und setze nicht lParam neu.

    *reinterpret_cast<HWND*>(lParam) = hwnd;
    

Anmelden zum Antworten