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/39660-windows-version-ermitteln.html)

MagicAndre1981 5. Feb 2005 23:56


Windows Version ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

in der Code-Library gibt es eine Funktion um die Windows-Version zu ermitteln. Ich habe nun Windows XP Media Center Edition 2005 bei meinem Notebook dabei gehabt, aber die Funktion aus der Code-Library sagt mir nun es ist WinXP Prof.
EVEREST Home Edition erkennt aber mein Windows als MCE.

Nun meine frage:
Wie kann man zw. WinXP Prof und WinXP MCE unterscheiden?

Mfg
André

Harry M. 6. Feb 2005 00:05

Re: Windows Version ermitteln
 
versuche die mal nach deinen wünschen umzubauen
Code:
{$IFDEF CONDITIONALEXPRESSIONS}
  {$IF Defined(TOSVersionInfoEx)}
    {$DEFINE TOSVERSIONINFOEX_DEFINED}
  {$IFEND}
{$ENDIF}
{$IFNDEF TOSVERSIONINFOEX_DEFINED}

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;

////////////////////////////////////////////////////////////////////////////////

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetOSVersionText);
end;

MagicAndre1981 6. Feb 2005 00:23

Re: Windows Version ermitteln
 
Hi delphicus,

deine Antwort löst mein Problem auch nicht. Ich habe auf MSDN mal nachgesehen dort folgendes gefunden:
Zitat:

An application running outside Media Center can detect whether it is running in Windows XP Media Center Edition by checking for the SM_MEDIACENTER value in a call to the GetSystemMetrics function. For more information, see GetSystemMetrics on the MSDN Web site.
Wenn man jetzt GetSystemMetrics aufruft will die Fkt. ein Integer als parameter. Wie lautet der Wert für SM_MEDIACENTER?

mfg
André

Robert_G 6. Feb 2005 00:33

Re: Windows Version ermitteln
 
10 Sekunden google ergaben 87. ;)

MagicAndre1981 6. Feb 2005 00:34

Re: Windows Version ermitteln
 
Hier die Lösung

die Konstante lautet:
SM_MEDIACENTER = 87;

Delphi-Quellcode:
//
// taken from PSDK Feb 2003 - "Getting the System version"
// (ms-help://MS.PSDK.1033/sysinfo/base/getting_the_system_version.htm)
//
function GetWinVersion: string;
var
  osvi            : TOSVersionInfo;
  bOsVersionInfoEx : boolean;
  key             : HKEY;
  szProductType   : array[0..79]of char;
  dwBuflen        : dword;
begin
  // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
  // If that fails, try using the OSVERSIONINFO structure.
  ZeroMemory(@osvi,sizeof(TOSVersionInfo));
  osvi.dwOSVersionInfoSize := sizeof(TOSVersionInfo);

  bOsVersionInfoEx := GetVersionEx(osvi);
  if(not bOsVersionInfoEx) then begin
    osvi.dwOSVersionInfoSize := VERSIONINFOSIZE;

    if(not GetVersionEx(osvi)) then begin
      Result := 'Fehler bei der Ermittlung der Windows-Version';
      exit;
    end;
  end;

  case osvi.dwPlatformId of
    // Test for the Windows NT product family.
    VER_PLATFORM_WIN32_NT:
      begin
        // Test for the specific product family.
        if(osvi.dwMajorVersion = 5) and (osvi.dwMinorVersion = 2) then
          Result := 'Microsoft Windows Server 2003 family, ';

        if(osvi.dwMajorVersion = 5) and (osvi.dwMinorVersion = 1) then
          Result := 'Microsoft Windows XP ';

        if(osvi.dwMajorVersion = 5) and (osvi.dwMinorVersion = 0) then
          Result := 'Microsoft Windows 2000 ';

        if(osvi.dwMajorVersion <= 4) then
          Result := 'Microsoft Windows NT ';

        // Test for specific product on Windows NT 4.0 SP6 and later.
        if(bOsVersionInfoEx) then begin
          // Test for the workstation type.
          if(osvi.wProductType = VER_NT_WORKSTATION) then begin
            if(osvi.dwMajorVersion = 4) then
              Result := Result + 'Workstation 4.0 '
            else if(osvi.wSuiteMask and VER_SUITE_PERSONAL <> 0) then
              Result := Result + 'Home Edition '
            else
            Begin                                                  // Unterscheidung zw. MCE und Prof.
              if GetSystemMetrics(SM_MEDIACENTER) <> 0 then
                Result := Result + 'Media Center Edition '
              else
                Result := Result + 'Professional ';
            End;
          end
          // Test for the server type.
          else if(osvi.wProductType = VER_NT_SERVER) then begin
            if(osvi.dwMajorVersion = 5) and
              (osvi.dwMinorVersion = 2) then
            begin // Win 2003
              if(osvi.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                Result := Result + 'Datacenter Edition '
              else if(osvi.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                Result := Result + 'Enterprise Edition '
              else if(osvi.wSuiteMask = VER_SUITE_BLADE) then
                Result := Result + 'Web Edition '
              else
                Result := Result + 'Standard Edition ';
            end // Win 2000
            else if(osvi.dwMajorVersion = 5) and
              (osvi.dwMinorVersion = 0) then
            begin
              if(osvi.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
                Result := Result + 'Datacenter Server '
              else if(osvi.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                Result := Result + 'Advanced Server '
              else
                Result := Result + 'Server ';
            end
            else begin // Windows NT 4.0
              if(osvi.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
                Result := Result + 'Server 4.0, Enterprise Edition '
              else
                Result := Result + 'Server 4.0 ';
            end;
          end
        end
        // Test for specific product on Windows NT 4.0 SP5 and earlier
        else begin
          dwBufLen := sizeof(szProductType);

          if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            'SYSTEM\CurrentControlSet\Control\ProductOptions',0,
            KEY_QUERY_VALUE,key) = ERROR_SUCCESS) then
          try
            ZeroMemory(@szProductType,sizeof(szProductType));

            if(RegQueryValueEx(key,'ProductType',nil,nil,
              @szProductType,@dwBufLen) <> ERROR_SUCCESS) or
              (dwBufLen > sizeof(szProductType)) then
            ZeroMemory(@szProductType,sizeof(szProductType));
          finally
            RegCloseKey(key);
          end;

          if(lstrcmpi('WINNT',szProductType) = 0) then
            Result := Result + 'Workstation ';
          if(lstrcmpi('LANMANNT',szProductType) = 0) then
            Result := Result + 'Server ';
          if(lstrcmpi('SERVERNT',szProductType) = 0) then
            Result := Result + 'Advanced Server ';

          Result := Format('%s%d.%d',[Result,osvi.dwMajorVersion,
            osvi.dwMinorVersion]);
        end;

        // Display service pack (if any) and build number.
        if(osvi.dwMajorVersion = 4) and
          (lstrcmpi(osvi.szCSDVersion,'Service Pack 6') = 0) then
        begin
          // Test for SP6 versus SP6a.
          if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009',
            0,KEY_QUERY_VALUE,key) = ERROR_SUCCESS) then

            Result := Format('%sService Pack 6a (Build %d)',[Result,
              osvi.dwBuildNumber and $ffff])
          else
            // Windows NT 4.0 prior to SP6a
            Result := Format('%s%s (Build %d)',[Result,
              osvi.szCSDVersion,osvi.dwBuildNumber and $ffff]);
          RegCloseKey(key);
        end
        // Windows NT 3.51 and earlier or Windows 2000 and later
        else begin
          Result := Format('%s%s (Build %d)',[Result,
            osvi.szCSDVersion,osvi.dwBuildNumber and $ffff]);
        end;
      end;
    // Test for the Windows 95 product family.
    VER_PLATFORM_WIN32_WINDOWS:
      begin
        if(osvi.dwMajorVersion = 4) and
          (osvi.dwMinorVersion = 0) then
        begin
          Result := 'Microsoft Windows 95 ';
          if(osvi.szCSDVersion[0] = 'C') or
            (osvi.szCSDVersion[0] = 'B') then Result := Result + 'OSR2 ';
        end;

        if(osvi.dwMajorVersion = 4) and
          (osvi.dwMinorVersion = 10) then
        begin
          Result := 'Microsoft Windows 98 ';
          if(osvi.szCSDVersion[0] = 'A') then Result:= Result + 'SE ';
        end;

        if(osvi.dwMajorVersion = 4) and
          (osvi.dwMinorVersion = 90) then
        begin
          Result := 'Microsoft Windows Millennium Edition';
        end;
      end;
    VER_PLATFORM_WIN32s:
      Result := 'Microsoft Win32s';
  end;
end;
Guten nacht euch allen.
André

Jonas 11. Dez 2005 21:06

Re: Windows Version ermitteln
 
Hi, das funktioniert super. Jedoch hab ich ne Frage. In Windows Vista, werden sind ja unter anderem auch noch andere Editions enhalten. Wenn man das nun unter Vista anwendet, hab ich mir sagen lassen das dort dann Media Center Edition steht, was ich natürlich nicht haben möchte.

http://msdn.microsoft.com/library/de...em_version.asp

Habe ich nach geschaut und bin jedoch nicht fündig geworden, hat jemand ne idee wie man das mit den Versionen herausbekommen kann, bzw Manuell irgendwie dazu schreiben könnte?

NicoDE 12. Dez 2005 12:47

Re: Windows Version ermitteln
 
Zitat:

Zitat von Jonas
Habe ich nach geschaut und bin jedoch nicht fündig geworden,

Vista ist noch beta.
(Wenn du es korrekt haben willst, dann kannst du bei > 5.2 'unbekannte Version' schreiben...)

Jonas 12. Dez 2005 12:51

Re: Windows Version ermitteln
 
Ja das weiß ich.
Ich hab zu 6.0 Vista geschrieben, was auch wunderbar funktioniert. Nur wird ausgelesen das es eine Media Center Edition ist, obwohl es sich um einer Ultimate Edition handelt.

NicoDE 12. Dez 2005 12:58

Re: Windows Version ermitteln
 
Zitat:

Zitat von Jonas
Ich hab zu 6.0 Vista geschrieben, was auch wunderbar funktioniert. Nur wird ausgelesen das es eine Media Center Edition ist, obwohl es sich um einer Ultimate Edition handelt.

Steht denn in der Dokumentation zu Vista, dass SM_MEDIACENTER bedeutet, dass es sich um die MCE handelt?

MagicAndre1981 12. Dez 2005 13:24

Re: Windows Version ermitteln
 
Zitat:

Zitat von NicoDE
Steht denn in der Dokumentation zu Vista, dass SM_MEDIACENTER bedeutet, dass es sich um die MCE handelt?

Nee, in der Doku zum Windows SDK für die BETA1 von Vista steht nix drin, wie mann die Versionen von Vista unterscheiden kann. SM_MEDIACENTER bezieht sich nur auf WindowsXP.

MagicAndre1981 19. Jan 2006 16:29

Re: Windows Version ermitteln [Update]
 
Liste der Anhänge anzeigen (Anzahl: 2)
So, ich hab mal ein Update der Erkennungs-Routine der Code-Lib gemacht, um weitere Windows-Versionen (mit Betas) zu erkennen.

Quellen:
Code der unit zum Erkennen von Windows ist im Anhang.

Unterstütze Versionen:
  • Windows Vista
  • Windows Server 2003 (Standard, Web Edition, Enterprise, DataCenter, Standard Edition for Itanium-based Systems, Enterprise Edition for Itanium-based Systems, DataCenter Edition for Itanium-based Systems, Standard x64 Edition, Enterprise x64 Edition, DataCenter x64 Edition)
  • Windows Server 2003 R2
  • Windows XP Prof. x64 Edition
  • Windows XP Prof.
  • Windows XP Home
  • Windows XP Tablet Edition
  • Windows XP Media Center Edition
  • Windows 2000 (Prof., Server, DataCenter, Advanced Server + Betas (Codename NT5.0))
  • Windows NT 4 Server (Server, Enterprise Server, Advanced Server)
  • Windows NT 4 Workstation (mit Unterscheidunf zw. SP6 und SP6a)
  • Windows NT 3.51
  • Windows 95 (A,B,C + Betas (Codename: Chicago, Nashville))
  • Windows 98 (Original, SE + Betas (Codename: Memphis))
  • Windows ME (Original + BETA 1 (Codename: Georgia))

Offene Fragen:
  • Unterscheidung der MCE-Versionen (2002,2004,2005)
  • Erkennung der Windows XP N-Editions

Benutzung:

Delphi-Quellcode:
uses GetWindowsVersion;

Edit1.Text := GetWinVersion;
So, dann happy Windowserkenning :zwinker:

André

MagicAndre1981 29. Aug 2006 16:05

Re: Windows Version ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 3)
So, es gibt wieder mal ein Update der Windowserkennungsfunktion.

Neu hinzugekommen ist die Erkennung von:
  • Erkennung der verschiedenen SKUs von Windows Vista
  • Unterscheidung zwischen TabletPC-Edition und TabletPC Edition 2005
  • Unterscheidung zwischen Windows XP Media Center Edition, Windows XP Media Center Edition 2004 und Windows XP Media Center Edition 2005
  • Erkennung von Windows Fundamentals for Legacy PCs

Unterstütze Versionen:
  • Windows Vista (alle SKUs)
  • Windows Server 2003 (Standard, Web Edition, Enterprise, DataCenter, Standard Edition for Itanium-based Systems, Enterprise Edition for Itanium-based Systems, DataCenter Edition for Itanium-based Systems, Standard x64 Edition, Enterprise x64 Edition, DataCenter x64 Edition)
  • Windows Server 2003 R2
  • Windows XP Prof. x64 Edition
  • Windows XP Prof.
  • Windows XP Home
  • Windows XP Tablet Edition und TabletPC Edition 2005
  • Windows Fundamentals for Legacy PCs
  • Windows XP Media Center Edition alle Versionen (2002, 2004, 2005)
  • Windows 2000 (Prof., Server, DataCenter, Advanced Server + Betas (Codename NT5.0))
  • Windows NT 4 Server (Server, Enterprise Server, Advanced Server)
  • Windows NT 4 Workstation (mit Unterscheidunf zw. SP6 und SP6a)
  • Windows NT 3.51
  • Windows 95 (A,B,C + Betas (Codename: Chicago, Nashville))
  • Windows 98 (Original, SE + Betas (Codename: Memphis))
  • Windows ME (Original + BETA 1 (Codename: Georgia))

Offene Fragen:
  • Erkennung von Windows XP Embedded
  • Erkennung der Windows XP N-Editions

Quellen:

MagicAndre1981 20. Mär 2007 14:55

Re: Windows Version ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Update:

In der neuen Version werden nun die N-Editions von XP (Home-N und Prof-N), WindowsXP 2003 Edition für IA64 und ein paar zusätzliche Betas unterstützt. Auch ein Bug bei der Erkennung von Win95 wurde beseitigt (Thx an Mazel ). Den Support für die K-und KN-Editions hab ich rausgenommen, da der Download von Technet so lahm ist und ich das nicht rechtzeitig testen konnte :wall:

Offene Fragen:
  • Erkennung von XP embedded
  • Erkennung von K- und KN Editions


André

MagicAndre1981 17. Apr 2007 19:35

Re: Windows Version ermitteln
 
So ich mache Fortschritt bei der Windowserkennung. Ich bastel gerade eine Komponente dafür.

Nun hab ich noch eine Frage. Wie lese ich die Revisionsnummer der Windowsversion aus? Ich meine diese Nummer: 6000.16386. Die 6000 ist die Buildnummer, da komm ich ran, nur die andere ist schwieriger zu bekommen. Es gibt die Schlüssel BuildLab und BuildLabEx, aber die werden bei einem Update des Kernels erhöht.

Diese Nummer brauche ich zur Unterscheidung der Longhorn Server Betas (Dez, feb und April CTP, da diese immer Build 6001 sind und sich nur in der Revisionsnummer unterscheiden :wall: ).

hat jemand eine Idee?

RWarnecke 6. Mai 2007 15:04

Re: Windows Version ermitteln
 
Zitat:

Zitat von MagicAndre1981
Nun hab ich noch eine Frage. Wie lese ich die Revisionsnummer der Windowsversion aus? Ich meine diese Nummer: 6000.16386. Die 6000 ist die Buildnummer, da komm ich ran, nur die andere ist schwieriger zu bekommen. Es gibt die Schlüssel BuildLab und BuildLabEx, aber die werden bei einem Update des Kernels erhöht.

Warum holste Dir die Nummer nicht aus der Registry ? Ich bastel auch gerade an einer Unit rum, die mir viele Informationen vom Betriebssystem ausliest. Die Nummer steht unter HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion. Meine Unit basiert auf vielen verschiedenen Beiträge hier aus dem Forum.

EDIT : Als Grundlage zu den ganzen Beiträgen aus hier aus dem Forum, kommt noch die Unit os_info2.pas aus diesem Beitrag hinzu.

MagicAndre1981 6. Mai 2007 16:56

Re: Windows Version ermitteln
 
Zitat:

Zitat von RWarnecke
Warum holste Dir die Nummer nicht aus der Registry ? Ich bastel auch gerade an einer Unit rum, die mir viele Informationen vom Betriebssystem ausliest. Die Nummer steht unter HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion.

weil die da nirgends steht :zwinker: :roll:

RWarnecke 6. Mai 2007 17:15

Re: Windows Version ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Verstehe ich da etwas falsch. Du möchtest doch die Build-Nummer haben oder ?

Im angehängten Bild siehst Du einen Auszug aus dem Registrykey HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion von einer Windows Vista Business Installation.

MagicAndre1981 6. Mai 2007 17:23

Re: Windows Version ermitteln
 
Zitat:

Zitat von RWarnecke
Verstehe ich da etwas falsch. Du möchtest doch die Build-Nummer haben oder ?

nöö, die Revisionsnummer, also die 16386 und nicht die 6000 ;)

RWarnecke 6. Mai 2007 17:35

Re: Windows Version ermitteln
 
Irgendwie stehe ich auf dem Schlauch. Du möchtest die Revisionsnummer haben. Die steht doch in der Zeichenkette drin. Parse die Zeichenkette doch. Dann hast Du die Nummer.

Du kannst doch die Explodefunktion nehmen und gibts immer die zweite Position aus. Damit hast Du doch dann Deine Nummer oder etwa nicht ?

MagicAndre1981 6. Mai 2007 17:39

Re: Windows Version ermitteln
 
die ändert sich bei Updates des Kernels!!!!!!!!

Kuck doch mal mein Bild im Album an. Bei den CTPs für Windows Server 2007 ist das kein Problem, doch für die Beta3 wird es Updates geben. Wenn nun ein Sicherheitsproblem festgestellt wird und ein Update kommt, dann ändert sich der String.

Nun verstanden wo mein Problem ist? :zwinker:

-187- 15. Jul 2008 00:57

Re: Windows Version ermitteln
 
Wollte die Unit unter einer Konsolen Application verwenden, bekomme aber den Fehler:

Project Project2.exe raised execption class EOIeSysError with message 'CoInitialize wurde nicht aufgerufen'.Process stopped. Use Step or Run to continue.

Abhilfe hierfür?

MagicAndre1981 15. Jul 2008 11:15

Re: Windows Version ermitteln
 
probier mal meine Komponente aus:

http://www.delphipraxis.net/internal...695&highlight=

Die ist aktueller.

rvp71 1. Jan 2009 17:42

Re: Windows Version ermitteln
 
Ist zwar schon ein altes Thema, aber hier noch ein wie ich finde interessanter Link zu dem Thema:
DSiWin32

Micha88 23. Feb 2009 14:58

Re: Windows Version ermitteln
 
Ich habe bei dieser Unit das Problem, dass er bei folgender Zeile sagt:
Unkompatible Typen, Array und PWideChar:

Delphi-Quellcode:
// szCSDVersion: array[0..127] of AnsiChar;
(lstrcmpi(
                  osvi.szCSDVersion,
                  'Service Pack 2') = 0) then

fkerber 23. Feb 2009 15:01

Re: Windows Version ermitteln
 
Hi!

Welche Delphi-Version setzt du ein?


Ciao, Frederic

Micha88 23. Feb 2009 15:02

Re: Windows Version ermitteln
 
Stimmt, habe ich vergessen zu sagen;

Ich verwende RAD 2009

MagicAndre1981 23. Feb 2009 15:29

Re: Windows Version ermitteln
 
nimm die folgende Komponente:

http://www.delphipraxis.net/internal...t.php?t=116695

Die geht unter Delphi 2009.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz