bool IsWindowsXP() - schnell
-
Original erstellt von <nutzlos>:
**return (IsXP=true);
else
return (IsXP=false);das ist falsch**
Was soll daran falsch sein? Was ist denn Deiner Meinung nach richtig?
-
OK
-
Schreib doch einfach im if-Block IsXP = true; und außerhalb dann am Ende return IsXP;
-
Warum zählst du die Calls mit? Die interessieren doch sowieso keinen. Mach eine BOOL-Variable und setze sie beim ersten Aufruf auf TRUE.
-
Original erstellt von <nutzlos>:
**return (IsXP==true);
else
return (IsXP==false);sonst wird doch immer true zurückgegeben**
Hm nein.
return (IsXP = false);
wertet zuerst den Ausdruck aus. Der setzt IsXP auf false und gibt false zurück. Dann gibt das return auch false zurück. In deiner variante gibt die Funktion dann dafür immer genau das falsche zurück, da IsXP anfangs auf false steht
-
Hi Jungs
Mit Zuweisung '=' und Vergleich '==' scheint ja bei vielen einhellig Unklarheit zu herrschen!!!
Das Teil funzt so wie's ist! (Ob sinnvoll oder nicht - ist Ansichtssache)
Der einzige vernuenftige 'Verbesserungsvorschlag' kam von Flenders.
@Peter
Schau Dir mal genau an,was er damit macht!
-
Was macht er denn damit? Er inkrementiert die Variable sinnlos...
-
-
Da reicht auch eine BOOL Variable, die man einmal auf TRUE setzt...wie gesagt
-
*Da reicht auch eine BOOL Variable, die man einmal auf TRUE setzt...wie gesagt
*Auch wenn's 'mal nicht WindowsXP ist???
PS: Einmal muss die Version schon abgefragt werden!
[ Dieser Beitrag wurde am 30.03.2003 um 16:26 Uhr von DerAltenburger editiert. ]
-
Argh, du verstehst mich einfach nicht.
Anstatt calls eine BOOL-Variable und nicht IsXP auf true
-
Mit Zuweisung '=' und Vergleich '==' scheint ja bei vielen einhellig Unklarheit zu herrschen!!!
Das Teil funzt so wie's ist! (Ob sinnvoll oder nicht - ist Ansichtssache)
Das stimmt auch nicht. Das Teil funktioniert nicht. Die Funktion wird immer true liefern.
-
Ach sooooo.
Dann machts aber doch fast dasselbe?
Ist doch egal ob zb:
NotFirst=true;
oder
inc calls;
Die Funktion muss ja wissen, ob's der erste oder ein wiederholter Aufruf ist.
Und ob's WinXP ist oder nicht muss auch gespeichert werden.
-
- THREAD CLOSED -
-
bool IsWindowsXP() { static char IsXP = -1; if(IsXP == -1) { OSVERSIONINFO osver; osver.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); GetVersionEx( &osver); IsXP = osver.dwMajorVersion == 5 && osver.dwMinorVersion >= 1) } return IsXP; }
oder vielleicht etwas wo der compilier besser optimieren kann
bool IsWindowsXP() { struct foo { static bool bar() { OSVERSIONINFO osver; osver.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); GetVersionEx( &osver); return osver.dwMajorVersion == 5 && osver.dwMinorVersion >= 1; } }; static const bool IsXP = foo::bar(); return IsXP; }
-
Es wird langsam lächerlich.
-
...und von welcher Winapi-Funktion bauen wir als nächstes eine ge'cache'te Version?
-
So jetzt tut der Meister sich mal melden *g*
War den Tag weg, sonst hätte ich vorher ja mal was gesagt.
Also zur meiner Verteidigung:1. Funktioniert das?
An alle die sagen: return (IsXP=true);
gäbe true zurück weil die Zuweisung erfolgreich sei,
haben wohl keine Ahnung was sie hier sagen und nochnie kompakten
Quellcode gesehen:int foo1,foo2,foo3; foo1 = foo2 = foo3 = false; // Alle auf false
2.
Warum zählst du die Calls mit? Die interessieren doch sowieso keinen.
Mach eine BOOL-Variable und setze sie beim ersten Aufruf auf TRUE.Das ist mehr Aufwand:
1. stdafx.h ändern (extren declaration)
2. stdafx.cpp ändern(declaration)
3. Start-Funktion(Wert setzen)
- Macht das ganze Unübersichtlicher.3. Nützlichkeit der Funktion:
Warum ich diese Funktion geschrieben habe:
Um bei meine Programme besser an die XP-GUI anzupassen:if( IsWindowsXP() ) DoNormalGUI(); else TryTolookLikeXP();
Mir ist klar das das Einsparen der GetVersionEx-Calls überhaupt nix bringt, aber ich habe das gepostet damit andere Leute was lernen, z.B. wie man eine Funktion dazu bringt einmal was zu berechnen und dann zu chachen(Makros:Nicht zur Laufzeit!). Und es hat ja schon Erfolg gehabt nun wissen einige das return (foo=false) schön false zurück gibt. Sieht man ja bei winsock programing:
int rc; while( (rc=recv(socket,recv_buf,buffer_len,0)) >0) ...
..weißt erst rc den Return-Wert von recv zu und gibt sich selbst weiter.
Noch ein Dank an "Dimah" die neuimplemntierung gefällt mir ganz gut, wieder was gelernt.
So zufrieden die Weißheit in Deutschland gesteigert zu haben gehe ich jetzt Bett, bald jedenfalls....Zum Ende noch mein persönlicher Eindruck der User im Forum:
Das Niveau ist hier net gerade hoch, es gibt ein paar die habens drauf aber der Rest sagt auch was ohne Ahnung.
z.B. konnte mir keiner bei COM/OLE, MSHTML/ MSXML weiterhelfen. Wo sind da die Profis?
Egal trozdem gutes Forum, es gibt ja meist Hilfe.
Also ich wills mir ja net verscheißen mit euch,
an alle noch schönen Sonntag Abend und viel Spaß beim progen.
Tristan[ Dieser Beitrag wurde am 30.03.2003 um 20:46 Uhr von Tristan editiert. ]
-
Original erstellt von <Peter>:
Das stimmt auch nicht. Das Teil funktioniert nicht. Die Funktion wird immer true liefern.Natürlich stimmt das. Nenne mir einen Grund, warum es immer true liefern soll.
return (IsXP = false);
Diese Zeile speichert zuerst false in IsXP, und liefert dann das Ergebnis von IsXP zurück. Nicht anderes.
**
1. Funktioniert das?
An alle die sagen: return (IsXP=true);
gäbe true zurück weil die Zuweisung erfolgreich sei,
haben wohl keine Ahnung was sie hier sagen und nochnie kompakten
Quellcode gesehen:int foo1,foo2,foo3; foo1 = foo2 = foo3 = false; // Alle auf false
**
Hat das wer behauptet
[ Dieser Beitrag wurde am 30.03.2003 um 20:47 Uhr von TriPhoenix editiert. ]
-
Dieser Thread hat wirklich Unterhaltungswert, respekt. Aber eine Frage habe ich noch:
Um bei meine Programme besser an die XP-GUI anzupassen:
Und wenn wir dann die Version 6 haben, verwenden wir wieder das 'alte' UI?