[BlueLeaf1336]>
PROGRAM>
WindowsのプロダクトIDを取得する
2004/02/14:作成
タイトルのとおりですが、次の2つのサイトのパクリです。
さらに、Windows2000sp4以外でのテストは一切していません。どちらにしても確かなのは、プロダクトIDはレジストリの次の場所に書いてあるということです(Win2000の場合)。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId
とりあえずメモリもパッと見では漏れずに、取得できています。
uses
Registry;
function GetWindowsProductID(): string;
const
KEY_READ = ((STANDARD_RIGHTS_READ or KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS
or KEY_NOTIFY) and (not SYNCHRONIZE));
var
OSVER: TOSVersionInfo;
SubKey: string;
KeyRoot: HKEY;
buf: PBYTE;
dwType, dwLen: DWORD;
begin
Result := '';
FillChar(OSVER, SizeOf(OSVER), #0);
OSVER.dwOSVersionInfoSize := SizeOf(OSVER);
if not GetVersionEx(OSVER) then exit;
if OSVER.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
SubKey := 'SOFTWARE\Microsoft\Windows NT\CurrentVersion';
end
else
begin
SubKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion';
end;
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar(SubKey), 0, KEY_READ, KeyRoot) <> 0 then exit;
buf := GetMemory(255);
dwLen := 255;
dwType := REG_SZ;
RegQueryValueEx(KeyRoot, 'ProductId', nil, @dwType, PBYTE(buf), @dwLen);
Result := string(PChar(buf));
FreeMemory(buf);
RegCloseKey(KeyRoot);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetWindowsProductID());
end;