Durch Zufall entdeckt:
Wenn ich diesen Code eingebe und starte:
kommt diese Anzeige:
[Blockierte Grafik: http://s1.postimage.org/1mu92xdvo/winver_bug.jpg]
Auf dem System ist aber WIN-7
Bug oder was...?
Durch Zufall entdeckt:
Wenn ich diesen Code eingebe und starte:
kommt diese Anzeige:
[Blockierte Grafik: http://s1.postimage.org/1mu92xdvo/winver_bug.jpg]
Auf dem System ist aber WIN-7
Bug oder was...?
Was gibt denn $WinVer raus?
bei $winver sieht das so aus:
[Blockierte Grafik: http://s1.postimage.org/1ns5ljibo/winver_bug2.jpg]
Auch Windows 7 hab einen 6.* Kernel, warum sollte dort also mehr rauskommen
Es geht mir nicht um den Kernel, sondern um die Anzeige auf der Oberfläche in einem Tool.
Hab mir selbst eine "Eselsbrücke" geschrieben:
PROC WINDOWS_VERSION
DECLARE winversion$
Winversion$=(Str$((~GetVersion() & $FFFF) & $FF)+"."+Str$((~GetVersion() & $FFFF) >> 8))
CASE winversion$ = "4.0":winanzeige$ = "Windows 95"
CASE winversion$ = "4.1":winanzeige$ = "Windows 98"
CASE winversion$ = "4.9":winanzeige$ = "Windows ME"
CASE winversion$ = "4.4":winanzeige$ = "Windows NT"
CASE winversion$ = "5.0":winanzeige$ = "Windows 2000"
CASE winversion$ = "5.1":winanzeige$ = "Windows XP"
CASE winversion$ = "6.0":winanzeige$ = "Windows Vista"
CASE winversion$ = "6.1":winanzeige$ = "Windows 7"
ENDPROC
Alles anzeigen
Die Version ergibt sich aus Major Version und Minor Version.
Die Major Version für Windows7 ist 6, die Minor Version ist 1 => ergiebt zusammen 6.1.
MüllSchlucker
Alles schön und gut. Wir wissen das.
Nun stell dir aber mal den "Normal-User" vor:
Der hat jetzt stolz ein Notebook für was weiß ich wieviele Euronen gekauft, der Verkäufer versichert ihm, daß er das neueste Betriebssystem hat, nämlich Windows-7, er läd sich irgendeine Software herunter und die zeigt ihm als Windows-Version 6.1 an.
Jetzt rennt er wutentbrannt in den PC-Laden, zieht den Verkäufer über den Tisch, knallt ihm eine und schmeisst das Notebook in die nächste Ecke usw... usw...
Alles nur, weil irgendein Programmierer schlampig gearbeitet hat und nicht dran gedacht hat, die Kernel-Anzeige in die Verkaufsanzeige umzuschreiben.
PS: Wenn du z.B. mein Tool "A-1-B" runterlädst, wirst du sehen, daß hier die Anzeige richtig für den "Normal-User" ist.
Das liegt an deinem Code, der ist nicht korrekt. Lies dir das mal durch:
Google Übersetzer
Zitat von AHT;875851Das liegt an deinem Code, der ist nicht korrekt. Lies dir das mal durch:
Welcher Code ist nicht korrekt
Ist doch alles ganz einfach
Windows Vista ist Version 6.0
Windows 7 ist Version 6.1
Windows 8 wird wohl Version 6.2 oder 6.3 werden oder vielleicht auch 7.0
Weil Windows 7 ist der Name, der enthält keine Versionsangabe
Zitat von ts-soft;875875Ist doch alles ganz einfach
Windows Vista ist Version 6.0
Windows 7 ist Version 6.1
Windows 8 wird wohl Version 6.2 oder 6.3 werden oder vielleicht auch 7.0Weil Windows 7 ist der Name, der enthält keine Versionsangabe
Dux
Ja was steht den in meiner "Eselsbrücke" und was habe ich geschrieben ?
Ich will den Namen automatisch anzeigen können.
D.h. wenn auf dem Rechner Windows-95 installiert ist, soll das gezeigt werden und wenn Windows-7 installiert ist, soll das gezeigt werden.
Die Windows-interne Bezeichnung sagt dem User nichts.
Falls es noch nicht gelesen wurde, meine "Eselsbrücke" macht das zeigt das vorhandene OS an - automatisch !
MüllSchlucker
Da ist auch kein Text falsch.
Wenn ich mal ~GetVersion() durch eine Variable ersetze, kann ich mit Horsts Code jede Version korrekt anzeigen. Aber vielleicht siehst Du mal nach, was WIN7 eigentlich bei GetVersion liefert. Ich denke dabei an Windows 3.1. Das hatte intern $0a03, also dezimal ausgeschriebene Version 3.10 und nicht 3.1! Vielleicht ist sowas ja der Übeltäter. Habe leider kein Seven, kann das nicht selbst testen.
Gruß Volkmar
bei ~GetVersion() sagt mir die Anzeige: 498139398
Wäre dann als Hex $1DB10106, nach Deinem Code aufgedröselt wird das dann auch als Windows 7 erkannt. Wie gesagt, ~GetVersion() habe ich dazu durch eine Variable ersetzt und den Wert dort eingesetzt.
Gruß Volkmar
Hallo Horst,
irgendwie verstehe ich das hier nicht so ganz
Warum liesst Du den Namen Deiner Version nicht einfach aus der Registry aus ?
~GetVersion() gibt halt nur die Versionsnummer zurück.
cls
Set("errorlevel",-1)
Declare Name$
'Hier wird für nicht NT Systeme ausgelesen
Name$ = @ReadIni$("HKEY_2","SOFTWARE\\Microsoft\\Windows\\CurrentVersion","ProductName")
'Wenn nicht vorhanden, dann NT
If Name$ = ""
'Hier wird für NT Systeme ausgelesen
Name$ = @ReadIni$("HKEY_2","SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion","ProductName")
Endif
Set("errorlevel",0)
Print Name$
Waitinput
end
Alles anzeigen
Sieht man auch so schon. Low Order Word ist das hindere Byte der Zahl:
498139398 = $1DB10106
Low Order Word ist 0106 = Version 6.1
Dann war mein nachstehend nochmals wiederholtes Posting mit der Zuordnung Windows-Versionsnummern zur Marketing-Bezeichnung damals auch falsch?
$H Windows.ph
$H Structs.ph
DEF GetProcAddress(2) !"KERNEL32.dll", "GetProcAddress"
DEF GetModuleHandle(1) !"KERNEL32", "GetModuleHandleA"
Declare Module$,MHANDLE&,Funktion$,_64Bit&,Bit$: Module$="Kernel32.DLL"
Funktion$="IsWow64Process" : MHANDLE&=GetModuleHandle(ADDR(Module$))
case GetProcAddress(MHANDLE&, ADDR(FUNKTION$))<>0 ' then
External("Kernel32.dll", "IsWow64Process", External("Kernel32", "GetCurrentProcess"), Addr(_64Bit&))
Bit$="32":case _64Bit&=1:Bit$="64"
Declare MajorVersion$,MinorVersion$,Win32s$,BuildNumber$,VER_PLATFORM$
Declare ServicePack$,OSVERSIONINFO#
Struct OSVERSIONINFO = ~OSVERSIONINFO : Dim OSVERSIONINFO#,OSVERSIONINFO
OSVERSIONINFO#.dwOSVersionInfoSize&=@SizeOf(OSVERSIONINFO#)
If ~GetVersionEx(OSVERSIONINFO#)
MajorVersion$=@Str$(OSVERSIONINFO#.dwMajorVersion&)
MinorVersion$=@Str$(OSVERSIONINFO#.dwMinorVersion&)
If OSVERSIONINFO#.dwPlatformId& = ~VER_PLATFORM_WIN32s
Win32s$="VER_PLATFORM_WIN32s"
ElseIf OSVERSIONINFO#.dwPlatformId& = ~VER_PLATFORM_WIN32_WINDOWS
BuildNumber$=@Str$(OSVERSIONINFO#.dwBuildNumber& & $FFFF)
VER_PLATFORM$ ="Win95/98/ME"
ElseIf OSVERSIONINFO#.dwPlatformId& = ~VER_PLATFORM_WIN32_NT
BuildNumber$=@Str$(OSVERSIONINFO#.dwBuildNumber&)
VER_PLATFORM$="NT"
Else
VER_PLATFORM$="Unbekannt" ' zum Zeitpunkt der Erstellung dieses Programms
EndIf
ServicePack$=OSVERSIONINFO#.szCSDVersion#
EndIf
Dispose OSVERSIONINFO#
' Zuordnung Windows-Versionsnummern zur Marketing-Bezeichnung
Declare e%,WinVs$[70]
' Short,Betriebssystem Version,Build,Datum
WinVs$[e%]="Win95,Windows 95 OEM Service Release 1 (95A),4.00.950 A,(15.08.1995)"
inc e%:WinVs$[e%]="Win95,Windows 95 OEM Service Release 2 (95B),4.00.1111 B,()"
inc e%:WinVs$[e%]="Win95,Windows 95 OEM Service Release 2.1,4.03.1212-1214 B,()"
inc e%:WinVs$[e%]="Win95,Windows 95 OEM Service Release 2.5C,4.03.1214C,()"
inc e%:WinVs$[e%]="Win98,Windows 98,4.10.1998,(30.06.1998)"
inc e%:WinVs$[e%]="Win98SE,Windows 98 Second Edition,4.10.2222 A,(Mitte 1999)"
inc e%:WinVs$[e%]="Win98,Windows Millenium Edition Beta,4.90.2476,()"
inc e%:WinVs$[e%]="WinME,Windows Millenium,4.90.3000,(September 2000)"
inc e%:WinVs$[e%]="WinNT,Windows NT 3.1,3.10.528,(27.07.1993)"
inc e%:WinVs$[e%]="WinNT,Windows NT 3.5,3.50.807,(21.09.1994)"
inc e%:WinVs$[e%]="WinNT,Windows NT 3.51,3.51.1057,(30.05.1995)"
inc e%:WinVs$[e%]="WinNT,Windows NT 4.00,4.00.1381,(24.08.1996)"
inc e%:WinVs$[e%]="WinNT,Windows NT 5.00 Beta 2,5.00.1515,()"
inc e%:WinVs$[e%]="Win2k,Windows 2000 Beta 3,5.00.2031,()"
inc e%:WinVs$[e%]="Win2k,Windows 2000 Beta 3 RC2,5.00.2128,()"
inc e%:WinVs$[e%]="Win2k,Windows 2000 Beta 3,5.00.2183,(02.01.2000)"
inc e%:WinVs$[e%]="Win2k,Windows 2000,5.00.2195,(17.02.2000)"
inc e%:WinVs$[e%]="WinNTS,Whistler Server Preview,2250,()"
inc e%:WinVs$[e%]="WinNTS,Whistler Server alpha,2257,()"
inc e%:WinVs$[e%]="WinXPs,Whistler Server interim release,2267,()"
inc e%:WinVs$[e%]="WinXPS,Whistler Server interim release,2410,()"
inc e%:WinVs$[e%]="WinXP-RC1,Windows XP (RC 1),5.1.2505,()"
inc e%:WinVs$[e%]="WinXP,Windows XP,5.1.2600,(25.10.2001)"
inc e%:WinVs$[e%]="WinXP-SP1,Windows XP Service Pack 1,5.1.2600.1105-1106,()"
inc e%:WinVs$[e%]="WinXP-SP2,Windows XP Service Pack 2,5.1.2600.2180,()"
inc e%:WinVs$[e%]="WinXP-SP3,Windows XP Service Pack 3,5.1.2600,(21.04.2008)"
inc e%:WinVs$[e%]="Win.NET-i,Windows .NET Server interim,5.2.3541,()"
inc e%:WinVs$[e%]="Win.NET-b3,Windows .NET Server Beta 3,5.2.3590,()"
inc e%:WinVs$[e%]="Win.NET-RC1,Windows .NET Server Release Candidate 1 (RC1),5.2.3660,()"
inc e%:WinVs$[e%]="Win.NET-RC2,Windows .NET Server 2003 RC2,5.2.3718,()#"
inc e%:WinVs$[e%]="Win2003Sbx,Windows Server 2003 (BetaX),5.2.3763,()"
inc e%:WinVs$[e%]="Win2003S,Windows Server 2003,5.2.3790,(24.04.2003)"
inc e%:WinVs$[e%]="Win2003S,Windows Server 2003 Service Pack 1,5.2.3790.1180,()"
inc e%:WinVs$[e%]="Win2003S,Windows Server 2003,5.2.3790.1218,()#"
inc e%:WinVs$[e%]="Win-HS,Windows Home Server,5.2.3790,(16.06.2007)#"
inc e%:WinVs$[e%]="VistaLH,Windows Longhorn,6.0.5048,()"
inc e%:WinVs$[e%]="VistaB1,Windows Vista Beta 1,6.0.5112,(20.07.2005)"
inc e%:WinVs$[e%]="VistaCTP,Windows Vista Community Technology Preview (CTP),6.0.5219,(30.08.2005)"
inc e%:WinVs$[e%]="Vista,Windows Vista TAP Preview,6.0.5259,(17.11.2005)"
inc e%:WinVs$[e%]="Vista,Windows Vista CTP (Dezember),6.0.5270,(14.12.2005)"
inc e%:WinVs$[e%]="Vista,Windows Vista CTP (Februar),6.0.5308,(17.02.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista April EWD,6.0.5365,(19.04.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Beta 2 Previw,6.0.5381,(01.05.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Beta 2,6.0.5384,(18.05.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RC1,6.0.5456,(20.06.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RC1 Build 5472,6.0.5472,(13.07.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RC1 Build 5536,6.0.5536,(21.08.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista RC1,6.0.5600.16384,(29.08.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RC2,6.0.5700,(10.08.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RC2 Build 5728,6.0.5728,(17.09.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista RC2,6.0.5744.16384,(03.10.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RTM Build 5808,6.0.5808,(12.10.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RTM Build 5824,6.0.5824,(17.10.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista Pre-RTM Build 5840,6.0.5840,(18.10.2006)"
inc e%:WinVs$[e%]="Vista,Windows Vista RTM (Release to Manufacturing),6.0.6000.16386,(01.11.2006)"
inc e%:WinVs$[e%]="Vista SP1,Windows Vista,6.0.6000,(08.11.2006)"
inc e%:WinVs$[e%]="Vista SP2,Windows Vista Service Pack 2,6.0.6002,(04.02.2008)"
inc e%:WinVs$[e%]="WinS2008,Windows Server 2008,6.0.6001,(27.02.2008)"
inc e%:WinVs$[e%]="Win7-RTM,Windows 7 RTM (Release to Manufacturing),6.1.7600.16385,(22.10.2009)"
inc e%:WinVs$[e%]="WinS2008R2,Windows Server 2008 R2 RTM (Release to Manufacturing),6.1.7600.16385,(22.10.2009)"
inc e%:WinVs$[e%]="Win7 SP1,Windows 7 Service Pack 1,6.1.7601,(22.10.2009)"
inc e%:WinVs$[e%]="Win8,Windows 8 Beta,8.0.0,(I.Q. 2012)"
' ... Künftige Erweiterungen hier
declare tmp$[],mamibu$,le%,WKN$,WLN$,WVE$,WDA$,PRI$,tmp$
mamibu$=MajorVersion$+"."+MinorVersion$+"."+BuildNumber$
le%=len(mamibu$)
Whileloop 0,e%
tmp$[]=explode(WinVs$[&Loop],",")
case SizeOf(tmp$[])<>4:print "Fehler in Eintrag Nr.";&Loop;":";SizeOf(tmp$[]);" Elemente?"
' print tmp$[2];" ?= ";mamibu$ : if %csrlin>20:WaitInput:cls:endif ' Test bei Problemen
if left$(tmp$[2],le%)=mamibu$
WKN$=tmp$[0] : WLN$=tmp$[1] : WVE$=tmp$[2] : WDA$=tmp$[3]
endif
EndWhile
Clear tmp$[],WinVs$[]
'--------------------------------------
' Ausgabe der belegten Variable !
'--------------------------------------
WindowTitle "Systemdaten und Laufzeitumgebung"
Font 2 ' 16:9-Schirme brauchen das
Randomize : Cls Rnd(16777216) ' Wechselnde Hintergrundfarben
Print " Seite 1 von 2 "
Print " MajorVersion = ";MajorVersion$
Print " MinorVersion = ";MinorVersion$
Print " WinVer meldet= ";$WinVer
Print " Win32s = ";chr$(34)+Win32s$+chr$(34)
Print " Build = ";BuildNumber$
Print " Technologie = ";VER_PLATFORM$
Print " Service Pack = ";ServicePack$
Print " Full_Version = ";WVE$
Print " Kurzname = ";WKN$+"-"+Bit$
Print " Bez.:",WLN$+"-"+Bit$+" Bit-Version"
Print " ReleaseDatum = ";WDA$
Print " Datenbreite = ";Bit$
casenot %Win32=1
Print " %Win32 = ";%Win32
Print " Computername = ";getenv$("USERDOMAIN")
PRI$=getenv$("PROCESSOR_IDENTIFIER")
case PRI$>"":Print " "+getenv$("PROCESSOR_IDENTIFIER")
tmp$=getenv$("NUMBER_OF_PROCESSORS"):Print " Prozessoren = ";
if tmp$>"":Print tmp$: else : print "1" : endif
Print " XProfan-Vers.= ";$ProfVer
Print " Akt.Laufwerk = ";GetEnv$("HOMEDRIVE")
Print " Username = ";getenv$("USERNAME")
Print " Stammvzeichn.= ";GetEnv$("HOMEPATH")
Print " User Profile = ";GetEnv$("USERPROFILE")
Print " Pers.Desktop = ";GetEnv$("USERPROFILE")+"\\Desktop\\"; '; ist wichtig!
WaitInput : Cls Rnd(16777216)
Print " Seite 2 von 2 "
Print " Öffentl.Verz.= ";GetEnv$("PUBLIC")
Print %ParCount
Print " Dieses Programm: " : Print " "+@Par$(0)
if (%ParCount > 0) : Print " Aufrufparameter: " : Print " "+@Par$(1) : Endif
if (%ParCount > 1) : Print " Weitere Paramtr: " : Print " "+@Par$(2) : Endif
' ... Raum für Erweiterungen
WaitInput
End
Alles anzeigen
Warum das denn, Peter? Du benutzt Horsts API doch gar nicht.
Ich dachte, das ist vielleicht nur eine Art Umleitung dorthin?
Egal, bisher klappt es jedenfalls - Danke für die Info!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!