Windows OS Version herausfinden

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Windows OS Version herausfinden

Beitrag 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
Zuletzt geändert von nco2k am 27.04.2009 19:27, insgesamt 2-mal geändert.
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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>
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

stimmt. :mrgreen:

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag 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.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag 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
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten