20 Stimmen

Erhalten Sie die Windows-Version?

Kann mir jemand helfen, herauszufinden, welche Version von Windows der Benutzer verwendet?

Ich habe einige Beispiele dafür gesehen, aber sie sind nicht für Vista/7 Betriebssysteme aktualisiert.

Außerdem wäre es nützlich zu erkennen, ob das Betriebssystem auf einer x32- oder x64-Architektur läuft.

Vielen Dank im Voraus.

0 Stimmen

1 Stimmen

@Craig FWIW, diese Frage wäre etwas einfacher zu beantworten, wenn Sie einen Tag eingefügt hätten, der angibt, welche Version von Delphi Sie verwenden

43voto

David Heffernan Punkte 585606

In XE2 wurde eine neue Klasse eingeführt, um dieses Problem zu lösen: TOSVersion .

  • Lesen Sie TOSVersion.Architecture um zu prüfen, ob es sich um ein 32- oder 64-Bit-Betriebssystem handelt.
  • Lesen Sie TOSVersion.Platform um zu prüfen, ob es sich um Windows oder Mac handelt.
  • Lesen Sie TOSVersion.Major y TOSVersion.Minor für Versionsnummern.
  • Lesen Sie TOSVersion.Name um den grundlegenden Produktnamen zu erhalten, z. B. Windows 7.
  • Lesen Sie TOSVersion.ToString um den vollständigen Produktnamen mit Version zu erhalten, z. B. Windows 7 Service Pack 1 (Version 6.1, Build 7601, 64-bit Edition).

Für ältere Versionen von Delphi empfehle ich das Folgende:

Für die Prüfung auf 2000, XP, Vista, 7 empfehle ich Ihnen die Lektüre Win32MajorVersion y Win32MinorVersion .

  • major.minor = 5.0 => Windows 2000
  • major.minor = 5.1 => Windows XP
  • major.minor = 5.2 => Windows 2003 Server oder XP64
  • major.minor = 6.0 => Windows Vista/2008 Server
  • major.minor = 6.1 => Windows 7/2008 Server R2

Die gleichen Informationen finden Sie auf MSDN aber das oben Gesagte stammt aus meinem Kopf!

Wenn Sie sehr detaillierte Produktinformationen wünschen, ist das etwas mehr Arbeit. Warrens Antwort zeigt einen guten Weg auf, diese Informationen zu erhalten. Wenn Sie die Fähigkeit testen wollen, dann sind Versionsnummern in Ordnung.

Utilice CheckWin32Version um zu prüfen, ob das vorherrschende Betriebssystem eine bestimmte Versionsstufe überschreitet. Sie sollten jedoch überprüfen, ob die Funktion in Ihrem Delphi korrekt funktioniert, da die Implementierung dieser Funktion in Delphi 6 und früher nicht korrekt war.

Um herauszufinden, was die native Betriebssystemarchitektur ist (32 oder 64 Bit), verwenden Sie die GetNativeSystemInfo Funktion. Diese Funktion ist auf älteren Betriebssystemen nicht verfügbar, so dass Sie sie explizit mit GetProcAddress . Test für wProcessorArchitecture=PROCESSOR_ARCHITECTURE_AMD64 um zu prüfen, ob ein 64-Bit-Betriebssystem vorliegt.

10voto

Warren P Punkte 61510

Die JEDI JCL tut dies bereits, sogar in älteren Versionen als XE2. Siehe Davids Antwort für die eingebaute Lösung in XE2 und später.

Mit der Jedi JCL können Sie die Einheit JclSysInfo hinzufügen und die Funktion GetWindowsVersion . Sie gibt einen Aufzählungstyp TWindowsVersion zurück.

Gegenwärtig enthält die JCL alle ausgelieferten Windows-Versionen und wird jedes Mal geändert, wenn Microsoft eine neue Version von Windows in einer Box ausliefert:

  TWindowsVersion =
   (wvUnknown, wvWin95, wvWin95OSR2, wvWin98, wvWin98SE, wvWinME,
    wvWinNT31, wvWinNT35, wvWinNT351, wvWinNT4, wvWin2000, wvWinXP,
    wvWin2003, wvWinXP64, wvWin2003R2, wvWinVista, wvWinServer2008,
    wvWin7, wvWinServer2008R2);

Wenn Sie wissen möchten, ob Sie 64-Bit-Windows 7 statt 32-Bit verwenden, rufen Sie JclSysInfo.IsWindows64 .

Beachten Sie, dass JCL auch Editionen wie Pro, Ultimate, etc. behandelt. Rufen Sie dazu GetWindowsEdition auf, und es wird eine dieser Editionen zurückgegeben:

TWindowsEdition =
   (weUnknown, weWinXPHome, weWinXPPro, weWinXPHomeN, weWinXPProN, weWinXPHomeK,
    weWinXPProK, weWinXPHomeKN, weWinXPProKN, weWinXPStarter, weWinXPMediaCenter,
    weWinXPTablet, weWinVistaStarter, weWinVistaHomeBasic, weWinVistaHomeBasicN,
    weWinVistaHomePremium, weWinVistaBusiness, weWinVistaBusinessN,
    weWinVistaEnterprise, weWinVistaUltimate, weWin7Starter, weWin7HomeBasic,
    weWin7HomePremium, weWin7Professional, weWin7Enterprise, weWin7Ultimate);

Aus historischem Interesse können Sie die NT-Level-Edition auch mit der Funktion NtProductType überprüfen, sie gibt zurück:

 TNtProductType =       (ptUnknown, ptWorkStation, ptServer, ptAdvancedServer,        
        ptPersonal, ptProfessional, ptDatacenterServer, 
        ptEnterprise, ptWebEdition);

Beachten Sie, dass oben "N-Ausgaben" entdeckt werden. Dabei handelt es sich um eine EU (Europa) Version von Windows, die aufgrund von EU-Kartellvorschriften entwickelt wurde. Das ist eine ziemlich feine Abstufung der Erkennung innerhalb der JCL.

Hier ist eine Beispielfunktion, die Ihnen helfen wird, Vista zu erkennen und etwas Besonderes zu tun, wenn Sie auf Vista sind.

function IsSupported:Boolean;
begin
  case GetWindowsVersion of
     wvVista:  result := false; 
    else
      result := true;
  end;
end;

Beachten Sie, dass Sie, wenn Sie eine "größer als"-Prüfung durchführen wollen, andere Techniken verwenden sollten. Beachten Sie auch, dass die Versionsprüfung oft eine Quelle für zukünftige Fehler sein kann. Ich habe mich in der Regel dafür entschieden, die Benutzer zu warnen und weiterzumachen, damit mein Binärcode in Zukunft nicht zur eigentlichen Fehlerquelle wird.

Kürzlich habe ich versucht, eine Anwendung zu installieren, und das Installationsprogramm überprüfte den freien Speicherplatz auf meiner Festplatte und verweigerte die Installation, weil ich mehr als 2 Gigabyte freien Speicherplatz hatte. Der vorzeichenbehaftete 32-Bit-Ganzzahlwert im Installationsprogramm wurde negativ, wodurch das Installationsprogramm abgebrochen wurde. Ich musste das Programm in einer VM installieren, um es zum Laufen zu bringen. Das Hinzufügen von "intelligentem Code" macht Ihre Anwendung oft "dümmer". Seien Sie auf der Hut.

Übrigens habe ich herausgefunden, dass Sie WMIC.exe über die Befehlszeile ausführen und Folgendes eingeben können path Win32_OperatingSystem (Das "Select * from Win32_OperatingSystem" hat bei mir nicht funktioniert). In Zukunft könnte die JCL vielleicht erweitert werden, um die WMI-Informationen zu verwenden.

2voto

Vic Adam Punkte 146

Die angezeigte Einheit (GetWinVersionInfo) aquí erkennt bis zu Vista. Ich kann mir nicht vorstellen, dass eine Aktualisierung für Windows 7 so schwierig sein wird. Ich glaube aber nicht, dass es Ihnen x86.x64 sagt.

1voto

Name Punkte 3282

Auf delphidabbler.com gibt es eine vollständiger Artikel über die Version des Betriebssystems, einschließlich 64-Bit-Versionen. Der Artikel wurde jedoch nicht aktualisiert, um Vista/7 einzubeziehen. Aber die gleichen Funktionen könnten immer noch funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X