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!!!