Delphi World - Как получить информацию о BIOS в Windows NT, 2000, XP
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как получить информацию о 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;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования