bool IsWindowsXP() - schnell
-
...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?
-
int foo1,foo2,foo3;
foo1 = foo2 = foo3 = false; // Alle auf false
Hat das wer behauptetNa return (IsXP=false) basiert auf dem gleichen Prinzip wie das mit dem foo in Kette.
Nur so am Rande.Dieser Thread hat wirklich Unterhaltungswert, respekt.
Ja das finde ich auch.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?
Der wahre Grund warum ich die Funktion geschrieben habe:
Unter XP laß ich die Progressbar vom System zeichenen, sieht besser aus, aber unter Win9x will ich eine eigene Klasse nehmen die auch ne schöne Bar zeichnet, aber die bei XP zu Fehlern führt.
Ich denke das mit Version 6 ist kein Problem,1. brauchen die Programme bis dahin net halten, 2. wird es da wieder GUI-Emus geben wie mom bei XP. Also ~6 Jahre wird das XP-GUI wohl noch bei Windows halten. Das alte Design der WinAPI hält ja auch schon seit den 90Jahren.
Egal ich finde der Thread ist fertig, alles besprochen.
cu Tristan
-
Ich denke das mit Version 6 ist kein Problem,
Du hast mich nicht verstanden, denn das ist ganz bestimmt ein Problem. Kann gut sein, daß Deine Funktion bereits auf der nächsten OS-Version nicht mehr true zurückgibt. Und dann benutzt Du in Deinem Programm nicht mehr die neuen UI-Elemente. Der korrekte Vergleich sieht (IMO) so aus:
[cpp]IsXP = (osver.dwMajorVersion > 5) || (osver.dwMajorVersion == 5 && osver.dwMinorVersion >= 1);[/cpp]
-
Dann erfüllt die Funktion aber nicht mehr ihren Zweck. Mit der Funktion will man doch herausfinden ob man sich exakt auf Windows XP befindet. Da würde vielleicht eine Funktion ala IsWindowsThemable besser passen.
-
Da würde vielleicht eine Funktion ala IsWindowsThemable besser passen.
Allerdings. Der OP benutzt sie schließlich als solche.
[edit] Und wen interessiert es schon, ob das Programm *exakt* unter XP läuft. Solchen Nachlässigkeiten haben wir dann nur wieder 'Features' zu verdanken wie beispielseise das GetVersionEx-Problem unter ME. [/edit]
[ Dieser Beitrag wurde am 31.03.2003 um 00:10 Uhr von -King- editiert. ]
-
Also ich würde mir die ganze Zuweisung sparen!
returne doch einfach true (od. 1) bzw false (0) je nach if.
Ist doch dann klarer!
gruß
Christopher
-
Ach ist unsinn was ich geschrieben habe, vergest es *Peinlich*
gruß
dose
-