注: Gabr は、の制限を回避できるアプローチについて質問していGetVersionEx
ます。JCL コードは GetVersionEx を使用するため、互換性レイヤーの対象となります。この情報は、互換性レイヤーをバイパスする必要がない人のみを対象としています。
Jedi JCL を使用して、ユニット JclSysInfo を追加し、 function を呼び出すことができますGetWindowsVersion
。列挙型 TWindowsVersion を返します。
現在、JCL には出荷されたすべての Windows バージョンが含まれており、Microsoft が新しいバージョンの Windows を同梱して出荷するたびに変更されます。
TWindowsVersion =
(wvUnknown, wvWin95, wvWin95OSR2, wvWin98, wvWin98SE, wvWinME,
wvWinNT31, wvWinNT35, wvWinNT351, wvWinNT4, wvWin2000, wvWinXP,
wvWin2003, wvWinXP64, wvWin2003R2, wvWinVista, wvWinServer2008,
wvWin7, wvWinServer2008R2);
32 ビットではなく 64 ビットの Windows 7 を実行しているかどうかを知りたい場合は、 を呼び出しますJclSysInfo.IsWindows64
。
JCL はすべて、Pro、Ultimate などのエディションを処理することに注意してください。そのために GetWindowsEdition を呼び出すと、次のいずれかが返されます。
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);
歴史的な関心のために、NtProductType 関数を使用して NT レベルのエディションも確認できます。次の値が返されます。
TNtProductType = (ptUnknown, ptWorkStation, ptServer, ptAdvancedServer,
ptPersonal, ptProfessional, ptDatacenterServer,
ptEnterprise, ptWebEdition);
上記で「N エディション」が検出されることに注意してください。これは、EU の反トラスト規制のために作成された EU (ヨーロッパ) バージョンの Windows です。これは、JCL 内での検出のかなり細かい段階です。
これは、Vista を検出し、Vista で特別なことを行うのに役立つサンプル関数です。
function IsSupported:Boolean;
begin
case GetWindowsVersion of
wvVista: result := false;
else
result := true;
end;
end;
「より大きい」チェックを行いたい場合は、他の手法を使用する必要があることに注意してください。また、バージョン チェックは、多くの場合、将来の破損の原因になる可能性があることに注意してください。私は通常、ユーザーに警告して続行することを選択しました。これにより、私のバイナリ コードが将来の破損の実際の原因にならなくなります。
最近、アプリをインストールしようとしましたが、インストーラーがドライブの空き容量をチェックしましたが、空き容量が 2 ギガバイトを超えていたため、インストールできませんでした。インストーラーの 32 ビット整数の符号付き値が負になり、インストーラーが壊れていました。動作させるには、VM にインストールする必要がありました。「スマート コード」を追加すると、多くの場合、アプリが「愚か」になります。用心してください。
ちなみに、コマンド ラインから WMIC.exe を実行して、次のように入力できることがわかりましたpath Win32_OperatingSystem
("Select * from Win32_OperatingSystem" は機能しませんでした)。将来的には、WMI 情報を使用するように JCL が拡張される可能性があります。