В NT/2000/XP не получится прочитать значения прямо из BIOS, однако, ничего не
мешает нам считать нужные значения из реестра.
procedure TBIOSInfo.GetRegInfoWinNT; var Registryv: TRegistry; RegPath: string; sl: TStrings; begin Params.Clear; RegPath := '\HARDWARE\DESCRIPTION\System'; registryv := tregistry.Create; registryv.rootkey := HKEY_LOCAL_MACHINE; sl := nil; try registryv.Openkey(RegPath, false); ShowMessage('BIOS Date: ' + RegistryV.ReadString('SystemBiosDate')); sl := ReadMultirowKey(RegistryV, 'SystemBiosVersion'); ShowMessage('BIOS Version: ' + sl.Text); except end; Registryv.Free; if Assigned(sl) then sl.Free; end;
|
На всякий пожарный:
// следующий метод получает многострочные значения из реестра // и преобразует их в TStringlist
function ReadMultirowKey(reg: TRegistry; Key: string): TStrings; const bufsize = 100; var i: integer; s1: string; sl: TStringList; bin: array[1..bufsize] of char; begin try result := nil; sl := nil; sl := TStringList.Create; if not Assigned(reg) then raise Exception.Create('TRegistry object not assigned.'); FillChar(bin, bufsize, #0); reg.ReadBinaryData(Key, bin, bufsize); i := 1; s1 := ''; while i < bufsize do begin if ord(bin[i]) >= 32 then s1 := s1 + bin[i] else begin if Length(s1) > 0 then begin sl.Add(s1); s1 := ''; end; end; inc(i); end; result := sl; except sl.Free; raise; end; end;
|
|