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.
0 Stimmen
Siehe auch stackoverflow.com/questions/2523957/ y stackoverflow.com/questions/1268178/
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