Delphi - база знаний


Как получить информацию о BIOS в Windows NT/2000/XP?


Как получить информацию о BIOS в Windows NT/2000/XP?



В 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;

Взято с Исходников.ru



Содержание раздела