bool IsWindowsXP() - schnell
-
bool IsWindowsXP() { static int calls = 0; static bool IsXP=false; calls++; if(calls>1)return IsXP; { OSVERSIONINFO osver; osver.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ); GetVersionEx( &osver); if( osver.dwMajorVersion == 5 && osver.dwMinorVersion >= 1 ) //XP and above return (IsXP=true); else return (IsXP=false); } }
So es gibt zwar viele Prozeduren dafür aber diese arbeitet mit einem chache, d.h. kann man die getrost sooft aufrufen wie man will.
Nur so kleine Func. am Rande
Schönen Sonntag noch
Tristan
-
Wann benötigt man schonmal so eine Funktion? Vielleicht einmal im Programm. Und die Funktion ist ja auch sooo langsam das man das richtig merkt.
-
return (IsXP=true);
else
return (IsXP=false);das ist falsch
-
Warum ist das falsch?
-
return (IsXP==true);
else
return (IsXP==false);sonst wird doch immer true zurückgegeben
-
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; }