Delphi-PRAXiS
Seite 1 von 2  1 2      

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

AlexII 15. Feb 2009 10:11


Windows Version ermitteln Funktion erweitern?
 
Hallo,

hab folgenden Code für die Ermittlung der Windows.Version gefunden. Hier ist aber Vista und Windows 7 nicht beachtet. Wer hat Interesse diesen Code zu erweitern? Ich brauche das und vllt auch viele andere.

Delphi-Quellcode:
const
  { operating system (OS)constants }
  cOsUnknown = -1;
  cOsWin95 = 0;
  cOsWin98 = 1;
  cOsWin98SE = 2;
  cOsWinME = 3;
  cOsWinNT = 4;
  cOsWin2000 = 5;
  cOsXP = 6;


function GetOperatingSystem: Integer;
var
  osVerInfo: TOSVersionInfo;
  majorVer, minorVer: Integer;
begin
  Result := cOsUnknown;
  { set operating system type flag }
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(osVerInfo) then
  begin
    majorVer := osVerInfo.dwMajorVersion;
    minorVer := osVerInfo.dwMinorVersion;
    case osVerInfo.dwPlatformId of
      VER_PLATFORM_WIN32_NT: { Windows NT/2000 }
        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;
      VER_PLATFORM_WIN32_WINDOWS: { Windows 9x/ME }
        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;

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

Bernhard Geyer 15. Feb 2009 10:12

Re: Windows Version ermitteln Funktion erweitern?
 
Schau doch einfach in die Jedi (JCL). Diese dürften auf jedenfall bis W2008 kompatible sein und in kürze auch Windows 7 unterstützen.

AlexII 15. Feb 2009 10:16

Re: Windows Version ermitteln Funktion erweitern?
 
Will nichts zusätzliches installieren.

Bernhard Geyer 15. Feb 2009 10:20

Re: Windows Version ermitteln Funktion erweitern?
 
Zitat:

Zitat von AlexII
Will nichts zusätzliches installieren.

Und wieso? Du kannst solche einfache Funktionen der Jedi auch verwenden ohne die JCL in der IDE installiert zu haben (Herunterladen, auspacken, Suchpfad ergänzen und uses-Anweisung ergänzen.

Alternativ kannst du dir den Quellcode der Jedi einfach mal anschauen was dort gemacht wurde und die Ergänzungen dann in deiner Funktion vornehmen.

Wenn du das nicht kannst, sag ich nur: Benutze die Suche. Es gibt genügend Quellcode-Beispiel zu diesem Problen in der Delphi-Praxis die auch schon Vista und W2008 berücksichtigen.

AlexII 15. Feb 2009 10:23

Re: Windows Version ermitteln Funktion erweitern?
 
Hab nix gefunden :gruebel: Na ok, mach mich auf die Such...

jfheins 15. Feb 2009 10:28

Re: Windows Version ermitteln Funktion erweitern?
 
Schau mal da: http://www.delphipraxis.net/internal...t.php?t=116695

Sollte auch ohne installation gehen ;)

Bernhard Geyer 15. Feb 2009 10:30

Re: Windows Version ermitteln Funktion erweitern?
 
Zitat:

Zitat von AlexII
Hab nix gefunden :gruebel: Na ok, mach mich auf die Such...

Komisch nur das es schon bei der Suche nach dem Funktionsnamen Hier im Forum suchenGetOperatingSystem genügend Treffer gibt :gruebel: Der uralte Beispielcode der Schweizer wurde schon öfters genommen ...

AlexII 15. Feb 2009 10:59

Re: Windows Version ermitteln Funktion erweitern?
 
Zitat:

Zitat von Bernhard Geyer
Komisch nur das es schon bei der Suche nach dem Funktionsnamen Hier im Forum suchenGetOperatingSystem genügend Treffer gibt :gruebel:

Auf den Begriff Hier im Forum suchenGetOperatingSystem muss man auch irgendwie kommen :wall:

Satty67 15. Feb 2009 19:12

Re: Windows Version ermitteln Funktion erweitern?
 
Damit ein weiterer Ableger der hier verwendeten Version herum schwirrt, auch mal meine angepasste Version:
Delphi-Quellcode:
type
  TOperationSystems = (gos_unknown, gos_Win95, gos_Win98, gos_Win98SE, gos_WinME,
                       gos_WinNT, gos_Win2k, gos_WinXP, gos_Vista, gos_Win7, gos_WinNewer);

function GetOSfriendlyName(OperationSystem : TOperationSystems):String;
var
  osVerInfo: TOSVersionInfo;
begin
  // GetVersionEx zum ermitteln der Zusatzinformationen
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  GetVersionEx(osVerInfo);

  case OperationSystem of
    gos_Win95   : Result := '95';
    gos_Win98   : Result := '98';
    gos_Win98SE : Result := '98SE';
    gos_WinME  : Result := 'ME';
    gos_WinNT  : Result := 'NT';
    gos_Win2k  : Result := '2000';
    gos_WinXP  : Result := 'XP';
    gos_Vista  : Result := 'VISTA';
    gos_Win7    : Result := '7';
    gos_WinNewer: Result := '7+';
  else
    Result := '';
  end;

  Result := 'Windows '+Result + ' ['+
            IntToStr(osVerInfo.dwMajorVersion)+'.'+
            IntToStr(osVerInfo.dwMinorVersion)+'.'+
            IntToStr(osVerInfo.dwBuildNumber)+'] '+
            osVerInfo.szCSDVersion;
end;

function GetOperatingSystem: TOperationSystems;
var
  osVerInfo: TOSVersionInfo;
  majorVer, minorVer: Integer;
begin
  // GetVersionEx zum ermitteln der Versionsnummer
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(osVerInfo) then begin

    // Hilfsvariablen zur leichteren Fallunterscheidung
    majorVer := osVerInfo.dwMajorVersion;
    minorVer := osVerInfo.dwMinorVersion;

    // Nach alter und neuer Kernelbaureihe aufteilen
    case osVerInfo.dwPlatformId of

      // Windows NT/2000/XP/Vista und neuer
      VER_PLATFORM_WIN32_NT: begin
        case majorVer of
          0..4 : Result := gos_WinNT;
             5 : if minorVer = 0 then Result := gos_Win2K
                   else Result := gos_WinXP;
             6 : if minorVer = 0 then Result := gos_Vista
                   else Result := gos_Win7;
        else
          Result := gos_WinNewer;
        end;
      end;

      // Windows 95/98/ME
      VER_PLATFORM_WIN32_WINDOWS: begin
        if majorVer = 4 then begin

          case minorVer of
             0 : Result := gos_Win95;
            10 : if osVerInfo.szCSDVersion[1] = 'A' then Result := gos_Win98SE
                   else result := gos_Win98;
            90 : Result := gos_WinME;
          else
            Result := gos_Unknown;
          end;

        // <> Major Version 4
        end else Result := gos_Unknown;

      end;

    // Case osVerInfo.dwPlatformId of
    else
      Result := gos_Unknown;
    end;

  // Aufruf von GetVersionEx() fehlgeschlagen
  end else Result := gos_Unknown;
end;

procedure TForm.FormCreate(Sender: TObject);
begin
  LabelWindows.Caption := GetOSfriendlyName(GetOperatingSystem);
end;
Hab' es jetzt nur mit XP und Win98SE (Virtuell) getestet, sollte aber trotz Umbau der Kernfunktion richtig arbeiten.

MagicAndre1981 15. Feb 2009 19:28

Re: Windows Version ermitteln Funktion erweitern?
 
windows 7 ist NT6.1 ;) Und warum nimmst du nicht meine Kompo? Die erkennt fast alle Versionen und die passenden Editionen dazu ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr.
Seite 1 von 2  1 2      

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