Seite 1 von 1

Windows OS Version herausfinden

Verfasst: 13.01.2007 19:52
von nco2k
weil fred den befehl OSVersion() immer noch nicht geupdated hat, habe ich diese prozedur vor paar monaten im englischen forum, auf anfrage eines users gepostet. jetzt stelle ich es einfach mal hier rein und vielleicht kann ja jemand etwas damit anfangen. :wink:

Code: Alles auswählen

#My_OS_Windows_NT3 = 5
#My_OS_Windows_95 = 10
#My_OS_Windows_NT4 = 15
#My_OS_Windows_98 = 20
#My_OS_Windows_ME = 25
#My_OS_Windows_2000 = 30
#My_OS_Windows_XP = 35
#My_OS_Windows_Server_2003 = 40
#My_OS_Windows_Vista = 45
#My_OS_Windows_Server_2008 = 50
#My_OS_Windows_7 = 55
#My_OS_Windows_Future = 100

Procedure MyOSVersionVal()
  
  Protected Result, osvi.OSVERSIONINFO, osviex.OSVERSIONINFOEX
  
  osvi\dwOsVersionInfoSize = SizeOf(OSVERSIONINFO)
  If GetVersionEx_(@osvi)
    Select osvi\dwPlatformId
      
      Case 1
        
        If osvi\dwMajorVersion = 4
          Select osvi\dwMinorVersion
            Case 0
              Result = #My_OS_Windows_95
            Case 10
              Result = #My_OS_Windows_98
            Case 90
              Result = #My_OS_Windows_ME
          EndSelect
        EndIf
        
      Case 2
        
        osviex\dwOsVersionInfoSize = SizeOf(OSVERSIONINFOEX)
        If GetVersionEx_(@osviex)
          Select osviex\dwMajorVersion
            
            Case 3
              Result = #My_OS_Windows_NT3
            Case 4
              Result = #My_OS_Windows_NT4
            Case 5
              Select osviex\dwMinorVersion
                Case 0
                  Result = #My_OS_Windows_2000
                Case 1
                  Result = #My_OS_Windows_XP
                Case 2
                  If osviex\wProductType = 1
                    Result = #My_OS_Windows_XP; 64Bit
                  Else
                    Result = #My_OS_Windows_Server_2003
                  EndIf
              EndSelect
            Case 6
              Select osviex\dwMinorVersion
                Case 0
                  If osviex\wProductType = 1
                    Result = #My_OS_Windows_Vista
                  Else
                    Result = #My_OS_Windows_Server_2008
                  EndIf
                Case 1
                  If osviex\wProductType = 1
                    Result = #My_OS_Windows_7
                  Else
                    Result = #My_OS_Windows_Server_2008; R2
                  EndIf
              EndSelect
              
          EndSelect
        Else
          Result = -1
        EndIf
        
    EndSelect
  Else
    Result = -1
  EndIf
  
  Select Result
    Case 0
      Result = #My_OS_Windows_Future
    Case -1
      Result = 0; Error
  EndSelect
  
  ProcedureReturn Result
EndProcedure

Procedure.s MyOSVersionStr()
  
  Protected Result.s
  
  Select MyOSVersionVal()
    Case #My_OS_Windows_NT3
      Result = "Windows NT3"
    Case #My_OS_Windows_95
      Result = "Windows 95"
    Case #My_OS_Windows_NT4
      Result = "Windows NT4"
    Case #My_OS_Windows_98
      Result = "Windows 98"
    Case #My_OS_Windows_ME
      Result = "Windows ME"
    Case #My_OS_Windows_2000
      Result = "Windows 2000"
    Case #My_OS_Windows_XP
      Result = "Windows XP"
    Case #My_OS_Windows_Server_2003
      Result = "Windows Server 2003"
    Case #My_OS_Windows_Vista
      Result = "Windows Vista"
    Case #My_OS_Windows_Server_2008
      Result = "Windows Server 2008"
    Case #My_OS_Windows_7
      Result = "Windows 7"
    Case #My_OS_Windows_Future
      Result = "Windows Future"
  EndSelect
  
  ProcedureReturn Result
EndProcedure

MessageRequester("My OS Version", MyOSVersionStr())
Beschreibung: http://msdn.microsoft.com/en-gb/library/ms724451.aspx

C++ Beispiel: http://msdn.microsoft.com/en-gb/library/ms724429.aspx

edit: unterstützung für Windows 7 und Windows Server 2008 R2 hinzugefügt.

c ya,
nco2k

Verfasst: 13.01.2007 19:57
von ts-soft
<offtopic> hab noch nen Bug entdeckt :wink:

Code: Alles auswählen

Case 90
  Result = "Windows ME" : End
so sollte es sein </offtopic>

Verfasst: 13.01.2007 20:02
von nco2k
stimmt. :mrgreen:

c ya,
nco2k

Verfasst: 13.01.2007 22:36
von Leonhard
Warum steht im Code:

Code: Alles auswählen

[...]
Result = "Windows XP";64Bit 
[...]
64-Bit als Kommentar?

Stimmt diese Aussage, dann sollte man dies als Text in den String schreiben.

Verfasst: 14.01.2007 01:54
von nco2k
weil den meisten egal sein dürfte, ob es sich um eine 32bit oder 64bit version von xp handelt. wenn du das unbedingt unterscheiden möchtest, kannst du es ja auskommentieren, deswegen hab ichs ja auch als kommentar drin gelassen. so kann jeder frei entscheiden. :wink:

ps: ich prüfe auch nicht ob es sich um die windows xp media center edition handelt oder die second edition bei windows 98 etc. wer solche checks braucht, kann er sie ja selber einbauen, die vorlage dafür ist anhand meines codes gegeben und alle weiteren infos sind zu finden unter: http://msdn2.microsoft.com/en-gb/library/ms724451.aspx bzw. als c++ beispielcode: http://msdn2.microsoft.com/en-gb/library/ms724429.aspx

c ya,
nco2k

Verfasst: 14.01.2007 02:16
von AND51
> ich prüfe auch nicht ob es sich um die windows xp media center edition handelt
Gerade eben zufällig gelesen:

Code: Alles auswählen

If GetSystemMetrics_(87)
     Debug "Windows media Center Edition"
EndIf
Interssiert mich, weil ich hier MCE betreibe :wink: