Namen aller fenster die offen sind!
-
Wie wäre es wenn Du den this Pointer Deiner Klasse beim EnumWindows Funktionsaufruf mit übergibst !!!
Dann kannst Du in der EnumWindowsProc() Funktion auch auf Deine Dialog Funktionen/Variablen zugreifen !!! Mit Deinem Code legst Du ja nur eine neue Instanz des Dialoges an
Dein Dialog läuft doch aber schon !!!MfG veganza
P.S. Soll ich Dir Deine nächste Frage verraten

-
Ok... wie übergebe ich den this zeiger?
Ich wette du wusstest das diese frage kommt oder???

aber bitte helf mir noch bisschen
-
Mehr sage ich nicht...Aber eigentlich habe ich gehofft, daß nach meinem Tip die Frage vielleicht ausbleibt
denn die 2 Zeilen Source-Code die folgen sollten eigentlich nicht das Problem sein...Ich hole mal etwas aus, damit es für Dich verständlicher wird:
In der MSDN ist zur EnumWindowsProc() Funktion folgendes über den 2. Parameter zu entnehmen.
LPARAM lParam // application-defined value... soll heißen, da können Wir der funktion was mitgeben !!!Also tun wir das auch...
EnumWindows( &EnumWindowsProc, (LPARAM)this );anstelle vom vorher verwendeten NULL im 2. Parameter.
In der EnumWindowsProc() steht ja nun dieser this-Pointer zur Verfügung (Wir übergeben den ja schließlich mit). Um jetzt in der Funktion auf unsere Klasse zugreifen zu können fügen Wir den folgenden Code an den Anfang der EnumWindowsProc() Funktion.
CGetwndowsDlg* pZumDialog = (CGetwndowsDlg*)lParam;und schon kannst Du in der CALLBACK Funktion über pZumDialog-> auf Deine Member Funktionen/Variablen zugreifen.
Hoffe jetzt ist alles klar

MfG veganza
[ Dieser Beitrag wurde am 14.09.2002 um 14:06 Uhr von veganza editiert. ]
-
danke dir aber es klappt nur wenn man:
CGetwndowsDlg* pZumDialog = (CGetwndowsDlg*)lParam;
benutzt!!!
Herzlichen dank sollte in die FAQ !!!
-
Hast natürlich recht... "Schreibfehler" meinerseits... ich korrigiere das mal gleich

MfG veganza
[ Dieser Beitrag wurde am 14.09.2002 um 14:06 Uhr von veganza editiert. ]
-
neue frage! Möchte jetzt variable an meinen Dialog übergeben klappt aber nicht!
char m_wndTxt[255]; if ( ::IsWindowVisible(hwnd) && ::IsWindow(hwnd) && ::GetParent(hwnd)==NULL ) { ::GetWindowText( hwnd, m_wndTxt, 255 ); pZumDialog->WindowText=m_wndTxt;//Fehler: error C2106: '=' : Linker Operand muss ein L-Wert sein }warum kann ich die variable nicht so übergeben?
falls ich das ganze so machen:
if ( ::IsWindowVisible(hwnd) && ::IsWindow(hwnd) && ::GetParent(hwnd)==NULL ) { ::GetWindowText( hwnd, pZumDialog->WindowText, 255 ); }wir immer nur der letzte Fenstername in die variable geschrieben!
Hast du eine idee?

[ Dieser Beitrag wurde am 14.09.2002 um 14:46 Uhr von chris_g editiert. ]
-
jetzt reichts!
=> kick

-
Vorweg:

Dir fehlen elementarste Grundkenntnisse in C/C++ !!! Es wäre hilfreich, wenn du Dir entweder ein Buch oder Tutorials über C/C++ zulegst. Letzt genanntes findest Du u.a. hier.
pZumDialog->WindowText=m_wndTxt;//Fehler: error C2106: '=' : Linker Operand muss ein L-Wert sein
Dein WindowText ist ein char* bzw char[255] habe ich recht ???
Ja habe ich... das ist ja "nur" ein Pointer zu einem Bereich im Speicher und Du kannst keinem Pointer auf diesem Weg einen String (m_wndTxt) zuweisen

2 Lösungsmöglichkeiten:
1. Da wir MFC programmieren würde ich anstelle eines
char WindowText[255] ein CString WindowText benutzen, dann funktioniert Deine Zuweisung.
2. Du behälst Dein char-Array und machst die Zuweisung per strcpy().
wir immer nur der letzte Fenstername in die variable geschrieben!
Hier hast Du ein kleines Verständnis-Problem:
Du gibst mir ja sicherlich recht, daß Wir die EnumWindowsProc() Funktion nur ein einziges mal aufrufen ??? Nach unserem Funktionsaufruf haben Wir alle Fenster "durchlaufen" !!!
Einfach ausgedrückt Deine Variable wird immer wieder mit einem neuen Fensternamen überschrieben... und wenn Sie fertig ist steht halt der letzte Fenstername drin... ganz einfach oder ???Wenn Du z.B. alle Namen "speichern" willst, würde ich Dir ein CString-CArray zum speichern empfehlen, daß kann man schon dynamisch erweitern... da die Fenster-Anzahl ja stark schwanken kann !!!
Wenn ich mich recht erinnere... wolltest Du doch Winamp schließen ??? Wenn Du diese WindowText Variablen-Übergabe nur machst um in der Klasse abzuprüfen ob jetzt Winamp im WindowText auftaucht oder nicht... würde ich diese Überprüfung mit anschließendem WM_DESTROY (Liquidierung der Anwendung) in die EnumWindowProc() Funktion verlagern... Nur so als Tip

Hoffe wie immer, daß es Dir meine Erklärung weiterhilft !!! Sei mir aber nicht böse... das war mein letzter Beitrag zu diesem Thread...
MfG veganza
-
danke veganza!!!
funktioniert jetzt alles! Das einzige was mir gefehlt hat war CStringArray!
Ich bin 14 und mach das nicht beruflich oder so und muss mon auch ziemlich viel für die schule machen!!!
-
hey
ich würde gerne noch was ähnliches wissen
ein teil von meinem prog sieht bis jetzt so aus:
ShellExecute(NULL, "open", "http://eine_seite.de", NULL, NULL, SW_SHOW); Sleep(10000); if (FindWindow(0, "TEILSTRING") != NULL) //falls das fenster offen ist, gehts weiter //else fehlermeldungals teilstring will ich es zb statt *titel-der-seite* - Mozilla Firefox oder *titel-der-seite* - Microsoft Internet Explorer oder wie des heißt,
so haben:if (FindWindow(0, "*titel-der-seite* - XXX") != NULL)
und ob jetzt firefox oder IE oder opera oder was auch immer da drin steht, solls weiter gehnhab schon bissle gesucht manche haben gemeint dass es mit EnumWindows geht. könnt ihr mir bitte helfen??
danke im vorraus