Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Windows Version ermitteln Funktion erweitern?

  Alt 15. Feb 2009, 19:12
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] = 'Athen 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.
  Mit Zitat antworten Zitat