Системные функции WinAPI/Работа с железом/BIOS
Системные функции WinAPI/Работа с железом/BIOS
Системные функции WinAPI/Работа с железом/BIOS Как узнать номер bios для разных виндов? windows 9x with memo1.lines do begin add('mainboardbiosname:'+^i+string(pchar(ptr($fe061)))); add('mainboardbioscopyright:'+^i+string(pchar(ptr($fe091)))); add('mainboardbiosdate:'+^i+string(pchar(ptr($ffff5)))); add('mainboardbiosserialno:'+^i+string(pchar(ptr($fec71)))); end; windows nt 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; 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; *********************************************************** Как получить дату bios? unit biosdate; interface function getbiosdate: string; implementation function segofstolinear(segment, offset: word): integer; begin result := (segment shl 4) or offset; end; function getbiosdate: string; begin result := string(pchar(ptr(segofstolinear($f000, $fff5)))); end; end. ********************************************************** Как получить информацию о bios в windows 9x? with memo1.lines do begin add('mainboardbiosname:'+^i+string(pchar(ptr($fe061)))); add('mainboardbioscopyright:'+^i+string(pchar(ptr($fe091)))); add('mainboardbiosdate:'+^i+string(pchar(ptr($ffff5)))); add('mainboardbiosserialno:'+^i+string(pchar(ptr($fec71)))); end; Как получить информацию о 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; Источник: http://ogoncharenko.narod.ru