BOOL CALLBACK Funktionen?



  • Ich habe das jetzt auf static gesetzt und kann auch die Fenster
    ermitteln.Danke. Nur innerhalb des static-Bereiches kann ich ja
    nicht wirklich meine Variablen die ich global angelegt habe verwenden.
    Wie kann ich nun mein Ergebnis (den Fensternamen) im restlichen Programmablauf
    weiter nutzen?

    BOOL CALLBACK CenumwinDlg::enumi(HWND hwnd, LPARAM lp)
    {
    char pcWinTitle[256];
    //CString wert; //eigentlich global angelegt
    if(!::GetWindow(hwnd, GW_OWNER))
    		{
    		::GetWindowText(hwnd, pcWinTitle, 255);
                        wert=pcWinTitle;
    //jetzt in ListBox anzeigen mit m_LBox.AddString(wert)
    		}
    
    return true;
    
    }
    


  • Kannst Du Dir bitte nochmals meinen Beitrag zwei Postings weiter oben anschauen?



  • jaja, manchmal war mickrigsoft gar nicht so blöd, dass sie ihren callback funktionen einen frei verwendbaren parameter spendierten. so als hätten sie's gewusst, dass ihre c-style winapi manchmal in c++ programmen verwendet würde 😉



  • Hm ok, ich rufe jetzt eine Funktion auf, die
    den Fensternamen in eine ListBox schreiben soll,
    aber genau an der Stelle stürzt das Programm ab.
    Eine Ausgabe in eine MessageBox funktioniert hingegen.

    //aufruf aus der BOOL
     CenumwinDlg *penumwin = (CenumwinDlg*) lp; 
      penumwin->setzen(wert);//wert enthält als CString den Fensternamen
    

    In der Funktion setzen(CString hasit) gibt es immer einen Absturz.
    Egal was ich dort mache.Nur MessageBox(hasit,"enthaltener Wert");
    wird richtig ausgeführt.



  • Aus Deinen Code-Schnippseln wird ja niemand schlau (zumindest ich nicht)...
    KannsDu bitte mal die gesamte Callback posten?



  • Danke für die Geduld 😞

    BOOL CALLBACK CenumwinDlg::enumi(HWND hwnd, LPARAM lp)
    {
    char pcWinTitle[256];
    CString wert;
    if(!::GetWindow(hwnd, GW_OWNER))
    		{
    			::GetWindowText(hwnd, pcWinTitle, 255);
    
    			wert=pcWinTitle;
    
     CenumwinDlg *penumwin = (CenumwinDlg*) lp; 
      penumwin->setzen(wert);
     		}
    
    return true;
    
    }
    


  • Sieht eigentlich ok aus...
    Und wie rufstvDu da EnumWindows auf? Hast Du den 2ten Parameter auf "this" gesetzt?

    PS: Warum postest Du den Code immer zweimal? Hab ich da was übersehenn?



  • Der Aufruf ist:

    ::EnumWindows((WNDENUMPROC)enumi, 0);
    

    Mit:

    EnumWindows(enumi, this);
    

    erhalte ich sonst:
    'EnumWindows': Konvertierung des Parameters 2 von 'CenumwinDlg *const ' in 'LPARAM' nicht möglich



  • Anderns schrieb:

    EnumWindows(enumi, this);
    

    vielleicht so?

    EnumWindows(enumi, (LPARAM)this);
    


  • Danke!!!


Anmelden zum Antworten