AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Windows-Version auslesen, auch XP 64-Bit und Vista?
Thema durchsuchen
Ansicht
Themen-Optionen

Windows-Version auslesen, auch XP 64-Bit und Vista?

Ein Thema von Luzzifus · begonnen am 22. Aug 2006 · letzter Beitrag vom 22. Aug 2006
Antwort Antwort
Luzzifus

Registriert seit: 11. Jun 2006
14 Beiträge
 
Delphi 6 Professional
 
#1

Windows-Version auslesen, auch XP 64-Bit und Vista?

  Alt 22. Aug 2006, 18:17
Hallo,

ich möchte unter Delphi 6 Professional mit folgender Funktion die Version des installierten Windows auslesen:

Delphi-Quellcode:
function GetOperatingSystem(): Integer;
// Bestimmt die Versionsnummer des Betriebssystems.
var
  osVerInfo: TOSVersionInfo;
  majorVer, minorVer: Integer;
begin
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(osVerInfo) then
  begin
    majorVer := osVerInfo.dwMajorVersion;
    minorVer := osVerInfo.dwMinorVersion;
    case osVerInfo.dwPlatformId of
      // Windows NT/2000
      VER_PLATFORM_WIN32_NT:
        begin
          if majorVer <= 4 then
            Result := cOsWinNT
          else if (majorVer = 5) and (minorVer = 0) then
            Result := cOsWin2000
          else if (majorVer = 5) and (minorVer = 1) then
            Result := cOsXP
          else
            Result := cOsUnknown;
        end;
      // Windows 9x/ME
      VER_PLATFORM_WIN32_WINDOWS:
        begin
          if (majorVer = 4) and (minorVer = 0) then
            Result := cOsWin95
          else if (majorVer = 4) and (minorVer = 10) then
          begin
            if osVerInfo.szCSDVersion[1] = 'Athen
              Result := cOsWin98SE
            else
              Result := cOsWin98;
          end
          else if (majorVer = 4) and (minorVer = 90) then
            Result := cOsWinME
          else
            Result := cOsUnknown;
        end;
      else
        Result := cOsUnknown;
    end;
  end
  else
    Result := cOsUnknown;
end;
Das funktioniert auch ganz gut, ausser unter Windows XP 64-Bit und Windows Vista. Es wird dann einfach 'cOsUnknown' zurückgegeben. Wie muss die Funktion erweitert werden, damit auch diese Betriebssysteme erfasst werden?

Oder gibt es eine Alternative, die diese beiden Betriebssysteme auch erkennt?

Vielen Dank im Voraus,
Luzzi.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Windows-Version auslesen, auch XP 64-Bit und Vista?

  Alt 22. Aug 2006, 18:37
HI, du findest die Infos im Plattform SDK (PSDK), dass wiederum liegt Delphi bei, findet sich aber immer aktuell auch beim Hersteller! Z.B. Online unter:

OSVERSIONINFO
und für die NTs auch
OSVERSIONINFOEX

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: Windows-Version auslesen, auch XP 64-Bit und Vista?

  Alt 22. Aug 2006, 18:43
Zitat von Luzzifus:
Das funktioniert auch ganz gut, ausser unter Windows XP 64-Bit und Windows Vista. Es wird dann einfach 'cOsUnknown' zurückgegeben. Wie muss die Funktion erweitert werden, damit auch diese Betriebssysteme erfasst werden
Vista is intern ein 6.0-NT (XP war 5.1, Win2003Server 5.2).
D.h. eine erweiterung dieses case-konstrukts:
Delphi-Quellcode:
case osVerInfo.dwPlatformId of
   // Windows NT/2000
   VER_PLATFORM_WIN32_NT:
     begin
       if majorVer <= 4 then
         Result := cOsWinNT
       else if (majorVer = 5) and (minorVer = 0) then
         Result := cOsWin2000
       else if (majorVer = 5) and (minorVer = 1) then
         Result := cOsXP
       else if (majorVer = 6) then
         Result := cOsVista
       else
         Result := cOsUnknown;
        end;
natuerlich muss TOSVersionInfo auch dementsprechend erweitert werden

Was die Architektur betrifft, sollte die EnvironmentVariable "PROCESSOR_ARCHITECTURE" gute Dienste leisten.
Ein Aufruf von Delphi-Referenz durchsuchenGetEnvironmentVariable mit dem Parameter gibt (als string!) bei einem 32-Bit-OS x86 zurueck, und iirc x64 bei einem 64-Bit-System.

Allerdings: Angaben ohne Gewaehr

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Luzzifus

Registriert seit: 11. Jun 2006
14 Beiträge
 
Delphi 6 Professional
 
#4

Re: Windows-Version auslesen, auch XP 64-Bit und Vista?

  Alt 22. Aug 2006, 18:52
Vielen Dank!!

@JasonDX: XP x64 hat die Versionsnummer 5.2, der Block muss also für beide fragwürdigen Betriebssysteme folgendermaßen erweitert werden, denke ich:

Delphi-Quellcode:
      // Windows NT/2000
      VER_PLATFORM_WIN32_NT:
        begin
          if majorVer <= 4 then
            Result := cOsWinNT
          else if (majorVer = 5) and (minorVer = 0) then
            Result := cOsWin2000
          else if (majorVer = 5) and (minorVer = 1) then
            Result := cOsXP
          else if (majorVer = 5) and (minorVer = 2) then
            Result := cOsXP64
          else if majorVer = 6 then
            Result := cOsVista
          else
            Result := cOsUnknown;
        end;
Zitat:
natuerlich muss TOSVersionInfo auch dementsprechend erweitert werden
Wie meinst du das? Das wird doch nur benutzt um die Versionsnummer auszulesen, was muss dafür erweitert werden?
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Windows-Version auslesen, auch XP 64-Bit und Vista?

  Alt 22. Aug 2006, 22:18
schaut mal in die Codelib, da gibts einen Code von mir, der schon viele Windowsversionen erfasst. Bald gibts ein Update um dann bis auf die N Editions alle Versionne zu erkennen.
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz