Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Windows-Version auslesen, auch XP 64-Bit und Vista? (https://www.delphipraxis.net/75631-windows-version-auslesen-auch-xp-64-bit-und-vista.html)

Luzzifus 22. Aug 2006 17:17


Windows-Version auslesen, auch XP 64-Bit und Vista?
 
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] = 'A' then
              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.

Der_Unwissende 22. Aug 2006 17:37

Re: Windows-Version auslesen, auch XP 64-Bit und Vista?
 
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

JasonDX 22. Aug 2006 17:43

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

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

Luzzifus 22. Aug 2006 17:52

Re: Windows-Version auslesen, auch XP 64-Bit und Vista?
 
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?

MagicAndre1981 22. Aug 2006 21:18

Re: Windows-Version auslesen, auch XP 64-Bit und Vista?
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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