Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Version Ermitteln (https://www.delphipraxis.net/97486-windows-version-ermitteln.html)

EarthQuaker 11. Aug 2007 06:25


Windows Version Ermitteln
 
Hallo alle miteinander... hat jemand eine ahung wie man vernünftig die windows version ermitteln kann ausser über die registry oder peer WMI?

also z.b.

diese option ist eigentlich des optionale aber da fehlen wieder welche z.b. Win64 MCE Versionen und unterschied zwischen den MCE versionen (2004, 2005)... und oder Vista Versionen (Starter, Home Basic, Home Premium, Business, Enterprise, Ultimate)
vielleicht kann mir ja einer von euch dabei behilflich sein...

danke schonmal im vorraus dafür!!!!!!!

PS. sorry das ich nen neuen thread auf mache deswegen!!!!

Delphi-Quellcode:
type
  POSVersionInfoEx = ^TOSVersionInfoEx;
  TOSVersionInfoEx = packed record
    dwOSVersionInfoSize: DWORD;
    dwMajorVersion    : DWORD;
    dwMinorVersion    : DWORD;
    dwBuildNumber     : DWORD;
    dwPlatformId      : DWORD;
    szCSDVersion      : array [0..127] of AnsiChar;
    wServicePackMajor : Word;
    wServicePackMinor : Word;
    wSuiteMask        : Word;
    wProductType      : Byte;
    wReserved         : Byte;
  end;

const
  VER_SERVER_NT                      = $80000000;
  {$EXTERNALSYM VER_SERVER_NT}
  VER_WORKSTATION_NT                 = $40000000;
  {$EXTERNALSYM VER_WORKSTATION_NT}
  VER_SUITE_SMALLBUSINESS            = $00000001;
  {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
  VER_SUITE_ENTERPRISE               = $00000002;
  {$EXTERNALSYM VER_SUITE_ENTERPRISE}
  VER_SUITE_BACKOFFICE               = $00000004;
  {$EXTERNALSYM VER_SUITE_BACKOFFICE}
  VER_SUITE_COMMUNICATIONS           = $00000008;
  {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
  VER_SUITE_TERMINAL                 = $00000010;
  {$EXTERNALSYM VER_SUITE_TERMINAL}
  VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
  {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
  VER_SUITE_EMBEDDEDNT               = $00000040;
  {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
  VER_SUITE_DATACENTER               = $00000080;
  {$EXTERNALSYM VER_SUITE_DATACENTER}
  VER_SUITE_SINGLEUSERTS             = $00000100;
  {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
  VER_SUITE_PERSONAL                 = $00000200;
  {$EXTERNALSYM VER_SUITE_PERSONAL}
  VER_SUITE_BLADE                    = $00000400;
  {$EXTERNALSYM VER_SUITE_BLADE}
  VER_SUITE_EMBEDDED_RESTRICTED      = $00000800;
  {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
  VER_SUITE_SECURITY_APPLIANCE       = $00001000;
  {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}

const
  VER_NT_WORKSTATION             = $0000001;
  {$EXTERNALSYM VER_NT_WORKSTATION}
  VER_NT_DOMAIN_CONTROLLER       = $0000002;
  {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
  VER_NT_SERVER                  = $0000003;
  {$EXTERNALSYM VER_NT_SERVER}

{$ENDIF}  // TOSVERSIONINFOEX_DEFINED


function GetOSVersionInfo(var Info: TOSVersionInfoEx): Boolean;
begin
  FillChar(Info, SizeOf(TOSVersionInfoEx), 0);
  Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
  Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
  if (not Result) then
  begin
    FillChar(Info, SizeOf(TOSVersionInfoEx), 0);
    Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
    Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
    if (not Result) then
      Info.dwOSVersionInfoSize := 0;
  end;
end;

function GetOSVersionText: string;
var
  Info: TOSVersionInfoEx;
  Key: HKEY;
begin
  Result := '';
  if (not GetOSVersionInfo(Info)) then
    Exit;
  case Info.dwPlatformId of
    { Win32s }
    VER_PLATFORM_WIN32s:
      Result := 'Microsoft Win32s';
    { Windows 9x }
    VER_PLATFORM_WIN32_WINDOWS:
      if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 0) then
      begin
        Result := 'Microsoft Windows 95';
        if (Info.szCSDVersion[1] in ['B', 'C']) then
          Result := Result +' OSR2';
      end
      else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 10) then
      begin
        Result := 'Microsoft Windows 98';
        if (Info.szCSDVersion[1] = 'A') then
          Result := Result + ' SE';
      end
      else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 90) then
        Result := 'Microsoft Windows Millennium Edition';
    { Windows NT }
    VER_PLATFORM_WIN32_NT:
      begin
        { Version }
        if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
          Result := 'Microsoft Windows Server 2003'
        else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 1) then
          Result := 'Microsoft Windows XP'
        else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then
          Result := 'Microsoft Windows 2000'
        else
          Result := 'Microsoft Windows NT';
        { Extended }
        if (Info.dwOSVersionInfoSize >= SizeOf(TOSVersionInfoEx)) then
        begin
          { ProductType }
          if (Info.wProductType = VER_NT_WORKSTATION) then
          begin
            if (Info.dwMajorVersion = 4) then
              Result := Result + #10'Workstation 4.0'
            else if(Info.wSuiteMask and VER_SUITE_PERSONAL <> 0) then
              Result := Result + #10'Home Edition'
            else
              Result := Result + #10'Professional';
          end
          else if (Info.wProductType = VER_NT_SERVER) then
          begin
             if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
             begin
               if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                 Result := Result + #10'Datacenter Edition'
               else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                 Result := Result + #10'Enterprise Edition'
               else if (Info.wSuiteMask = VER_SUITE_BLADE) then
                 Result := Result + #10'Web Edition'
               else
                 Result := Result + #10'Standard Edition';
             end
             else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then
             begin
               if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                  Result := Result + #10'Datacenter Server'
               else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                  Result := Result + #10'Advanced Server'
               else
                  Result := Result + #10'Server';
             end
             else
             begin
               Result := Result + #10'Server ' +
                 IntToStr(Info.dwMajorVersion) + '.' +
                 IntToStr(Info.dwMinorVersion);
               if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                 Result := Result + ', Enterprise Edition';
             end;
          end;
        end;
        { CSDVersion }
        if (Info.dwMajorVersion = 4) and
          (StrIComp(Info.szCSDVersion, 'Service Pack 6') = 0) and
          (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009', 0,
            KEY_QUERY_VALUE, Key) = ERROR_SUCCESS) then
        begin
          Result := Result + #10'Service Pack 6a';
          RegCloseKey(Key);
        end
        else
          Result := Result + #10 + StrPas(Info.szCSDVersion);
        Result := Result + #10'(Build ' +
          IntToStr(Info.dwBuildNumber and $FFFF) + ')';
      end;
  end;
end;

hathor 11. Aug 2007 07:20

Re: Windows Version Ermitteln
 
Zitat:

Ermitteln der Windows-Version

Um zu ermitteln, welche Version von Windows Sie ausführen,

1.Gehen Sie in der Taskleiste auf Start und dann auf Ausführen.

2.Geben Sie in das Dialogfeld winver ein und klicken Sie auf OK.

3.Die Windows Version wird im Dialogfeld angezeigt.
-------------------------------------------------------
Es wird aber nur Folgendes aus der Registry angezeigt:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
ProductName
CurrentVersion
BuildLab
CSDVersion

Luckie 11. Aug 2007 07:44

Re: Windows Version Ermitteln
 
In der Code-Lib gibt e dazu entsprechenden Cod. Der sollte eigentlich alles erkennen.

EarthQuaker 11. Aug 2007 14:34

Re: Windows Version Ermitteln
 
@ Luckie... erkennt er auch die unterschiedlichen Vista Verionen? währe ganz praktisch ohne sowas über die Registry zu Ermitteln!

Hast du eventuell nen link? währe nett danke schonmal

MagicAndre1981 11. Aug 2007 15:45

Re: Windows Version Ermitteln
 
Zitat:

Zitat von EarthQuaker
@ Luckie... erkennt er auch die unterschiedlichen Vista Verionen?

das hab ich schon fertig aber noch nicht veröffentlicht. :oops:

EarthQuaker 11. Aug 2007 16:25

Re: Windows Version Ermitteln
 
@ MagicAndre1981


wann ist es soweit wann es veröffentlicht wird?
oder hast du einen teilausschnitt davon was du mir zur verfügung stellen kannst?

z.b.:
Delphi-Quellcode:
const
  VER_SERVER_NT                      = $80000000;
  {$EXTERNALSYM VER_SERVER_NT}
  VER_WORKSTATION_NT                 = $40000000;
  {$EXTERNALSYM VER_WORKSTATION_NT}
oder:

Delphi-Quellcode:
        { Version }
        if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
          Result := 'Microsoft Windows Server 2003'
        else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 1) then
          Result := 'Microsoft Windows XP'
        else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then
          Result := 'Microsoft Windows 2000'
        else
          Result := 'Microsoft Windows NT';
        { Extended }
        if (Info.dwOSVersionInfoSize >= SizeOf(TOSVersionInfoEx)) then
        begin
          { ProductType }
          if (Info.wProductType = VER_NT_WORKSTATION) then
          begin
            if (Info.dwMajorVersion = 4) then
              Result := Result + #10'Workstation 4.0'
            else if(Info.wSuiteMask and VER_SUITE_PERSONAL <> 0) then
              Result := Result + #10'Home Edition'
            else
              Result := Result + #10'Professional';
          end
währe ganz nett.. danke schonmal im vorraus!

MagicAndre1981 11. Aug 2007 20:07

Re: Windows Version Ermitteln
 
Zitat:

Zitat von EarthQuaker
wann ist es soweit wann es veröffentlicht wird?
oder hast du einen teilausschnitt davon was du mir zur verfügung stellen kannst?

ok, dann installiere ich Delphi noch mal in einer VM und schau noch mal drüber. Da muss ich die Unterscheidung der Betaeditions vom Server 2008 erst mal rauslassen.

EarthQuaker 11. Aug 2007 20:12

Re: Windows Version Ermitteln
 
kannst ja auch komplett schicken umsomehr infos umso besser eigentlich ... wobei wie gesagt sollte halt was sein wo man den unterschiied mit dabei hat... also home und die anderen version von vista.. vielleicht hast ja auch eine wo media center dabei ist.. also 2004 und 2005...

Mazel 11. Aug 2007 20:23

Re: Windows Version Ermitteln
 
Die unterschiedlichen Vista Version sind in der Registry zu finden mit dem Namen EditionID. Natürlich nur unter Vista ;). Und zwar unter: HKLM\SOFTWARE\Windows NT\CurrentVersion\

EarthQuaker 11. Aug 2007 20:25

Re: Windows Version Ermitteln
 
@ Mazel

Joar des weis ich ja.. aber will eigentlich von der WMI und von der Reg weg.. am besten alles über funktionen oder proceduren... währe einfacher für mich und praktischer *gg*

aba wann komt von dir ne neue version von mypc raus ^^ paar dinge habsch dir ja gesagt :D

MagicAndre1981 11. Aug 2007 20:28

Re: Windows Version Ermitteln
 
Zitat:

Zitat von Mazel
Die unterschiedlichen Vista Version sind in der Registry zu finden mit dem Namen EditionID. Natürlich nur unter Vista ;). Und zwar unter: HKLM\SOFTWARE\Windows NT\CurrentVersion\

dafür gibts ne API Funktion die macht das viel besser ;)

EarthQuaker 11. Aug 2007 20:30

Re: Windows Version Ermitteln
 
@ MagicAndre1981


Sage ich ja ... nur die brauche ich ja ... :-D also wenn du was gefunden hast oder was für mich dann immer her damit.. da habsch wieder was zu tun :-D

fLaSh11 11. Aug 2007 20:47

Re: Windows Version Ermitteln
 
Die Windowsversion kann man auch ganz einfach mit der JVCL ermitteln. (weiß grad net wie die Kompo heißt; glaub JVSystemInformation oder so)

EarthQuaker 11. Aug 2007 20:50

Re: Windows Version Ermitteln
 
@ fLaSh11

a stimmt aber ich wollte sowas alles ohne zusätliche komponenten machen bzw. bezweifle ich sogar das die kompnete die unterschiedlichen windows version ermitteln kann wie Starter oder Enterprise Version von Windows Vista...

Mazel 11. Aug 2007 21:23

Re: Windows Version Ermitteln
 
Zitat:

Zitat von MagicAndre1981
dafür gibts ne API Funktion die macht das viel besser ;)

Aso, ok, würde ich auch gerne wissen, welche das ist.
Je weniger WMI und je weniger Registry umso besser ;)

EarthQuaker 11. Aug 2007 22:10

Re: Windows Version Ermitteln
 
@ Mazel

sage ich ja... jetzt muss mann nur noch des alles habe :-D

Luckie 11. Aug 2007 22:39

Re: Windows Version Ermitteln
 
Nur mal so am Rande bemerkt, die API-Funktion wird auch nicht anderes machen, asl den Registryschlüssel auszulesen. Aber wenn es eine API-Funktion gibt, sollte man natürlich diese nehmen, falls Microsoft da mal was ändert.

hathor 12. Aug 2007 00:06

Re: Windows Version Ermitteln
 
GETVERSION API

http://support.microsoft.com/kb/509055/de

Luckie 12. Aug 2007 00:17

Re: Windows Version Ermitteln
 
Das Problm ist nicht der Code (desweiteren sollte man GetVersionEx benutzen), sondern die ermittelten Kennungen den Betriebssystembezeichnungen zu zu ordnen.

Nuclear-Ping 25. Okt 2007 14:24

Re: Windows Version Ermitteln
 
Wollte grad den Code aus der CodeLib verbauen, weil ich prüfen muss, ob beim Anwender Vista läuft und hab dabei festgestellt, dass er bei meinem Vista Home Premium meint, ich hätte ein "Microsoft Windows Server 2003, Home Edition (Build 6000)". Wie soll man da auf "Vista" prüfen?

[edit]
Andere Lösung gefunden:
http://17slon.com/blogs/gabr/2007/02...ect-vista.html
[/edit]

MagicAndre1981 25. Okt 2007 23:09

Re: Windows Version Ermitteln
 
oder meine Kompo nutzen ;)

beyond_7 23. Dez 2007 18:20

Re: Windows Version Ermitteln
 
Ich habe versucht, die von fLaSh11 erwähnte Komponente JvComputerInfoEx aus der JVCL zu verwenden, komme aber nicht an die properties OSVersion und ProductType heran (Ich hätte sie gerne als Caption (also als String) für ein Label.). Kann mir da jemand helfen?

Luckie 5. Apr 2008 13:19

Re: Windows Version Ermitteln
 
Zitat:

Zitat von MagicAndre1981
oder meine Kompo nutzen ;)

Wo ist die denn jetzt eigentlich? Mit der Suche Hier im Forum suchenwindows version ermitteln findet sich da nichts. :?

MagicAndre1981 5. Apr 2008 18:09

Re: Windows Version Ermitteln
 
hier: http://www.delphipraxis.net/internal...t.php?t=116695

Ich suche noch nal ne passenden Lizenz und dann gibts bald ein Update.

rollstuhlfahrer 6. Apr 2008 09:10

Re: Windows Version Ermitteln
 
HI,

kann man nicht einfach die Ausgabe von "ver" (aus der Komandozeile) parsen und schon hat man die gesuchte Version??
Die Version steht in Zeile 2

rollstuhlfahrer

haentschman 6. Apr 2008 10:38

Re: Windows Version Ermitteln
 
Zitat:

Ich habe versucht, die von fLaSh11 erwähnte Komponente JvComputerInfoEx aus der JVCL zu verwenden, komme aber nicht an die properties OSVersion und ProductType heran (Ich hätte sie gerne als Caption (also als String) für ein Label.). Kann mir da jemand helfen?
Guten Morgen... :-D

nun ja... bei JvComputerInfoEx hast du mehrere Eigenschaften, welche das OS betreffen. Da du gern eine String hättest kommt der Einfachheit halber die Eigenschaft JvComputerInfoEx.OS.ProductName in Frage.

Wenn Du Die Eigenschaft OSVersion benutzen möchtest kannst du das doch umsetzen.
Delphi-Quellcode:
if JvComputerInfoEx.OS.OSVersion = wvWinVista then Label.Caption:='auch das noch !';
Es gibt mit Sicherheit noch elegantere Lösungen...aber Sonntag und diese Uhrzeit. :-D

Vieleicht hilft es ja. :hi:


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