16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ServerかWorkStationかを返す関数"
この発言は #01423 いさやん さんのWindowsNTかを返す関数 に対するコメントです
NTでさらにServer か WorkStationかを判定する方法です。
W2KではProfessional,XPではHomeEdition,Professional が WorkStation
OSのバージョンを返す関数としてGetVersionEx がありますが
この関数の引数につかえる
OSVERSIONINFOEX 構造体にいつのまにか
wProductType が増えてこれで判定できるようになってるみたいですが、
> Windows NT/2000/XP: Included in Windows NT 4.0 SP6 and later.
とあります。そもそもDelphiにOSVERSIONINFOEX が定義されてないようです
ので確実に判定するためにレジストリチェックして判定する方法です。
uses Registry; // usesする
{ ProductType 文字列を返します }
{
WINNT Windows NT Workstation
SERVERNT Windows NT Server (3.5 以降)
LANMANNT Windows NT Advanced Server (3.1)
}
function GetProductType: string;
const
ProductKey = 'SYSTEM\CurrentControlSet\Control\ProductOptions';
var
Reg: TRegistry;
OsType: string;
osv: TOSVERSIONINFO;
begin
Result := EmptyStr;
osv.dwOSVersionInfoSize := sizeof(osv);
GetVersionEx(osv);
if (osv.dwPlatformId <> VER_PLATFORM_WIN32_NT) then
begin
Result := EmptyStr;
Exit;
end;
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKeyReadOnly(ProductKey);
OsType := Reg.ReadString('ProductType');
Reg.CloseKey;
finally
Reg.Free;
end;
Result := OsType;
end;
{ Workstation の判定 }
{ True の場合 Workstation}
function IsNTWorkstation: boolean;
var
OsType: string;
begin
OsType := GetProductType;
result := (CompareText(OsType, 'WINNT') = 0);
end;
{ Server の判定 }
{ True の場合 Server}
function IsNTServer: boolean;
var
OsType: string;
begin
OsType := GetProductType;
result := (CompareText(OsType, 'SERVERNT') = 0) or
(CompareText(OsType, 'LANMANNT') = 0);
end;
参考URL:
http://www.microsoft.com/JAPAN/support/kb/articles/JP152/0/78.asp
http://www.microsoft.com/JAPAN/support/kb/articles/JP92/3/95.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us
/sysinfo/sysinfo_92jy.asp
(折り返してますので連結してください)
@ノ" いさやん
~~~~~
Original document by いさやん 氏 ID:(YIB02642)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|