Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Получить информацию о BIOSе

Delphi , ОС и Железо , BIOS

Получить информацию о BIOSе

Вот пример как можно даты БИОС материнской платы и видеокарты выдрать.

То же самое можно с названием производителя и версией.

В WinNT приходится читать не из ПЗУ а из реестра но это достаточно надежно

- соотв ключи WinNT закрывает на запись и обновляет при каждом старте (?).

Для Win9x можешь хоть весь БИОС напрямую читать.

Получить заводской номер винчестера (не тот что getvolumeinfo дает) ИМХО

невозможно - порты IDE даже Win9x блокирует.

Code:

type
TRegistryRO = class (TRegistry)
 function OpenKeyRO (const Key: string): Boolean;
end;
{ это уже ветхая история - был один глюк у D3}
 
implementation
 
uses WAPIInfo, Windows, SysUtils, StrUtils;
 
function TRegistryRO.OpenKeyRO (const Key: string): Boolean;
function
IsRelative(const Value: string): Boolean;
begin Result := not ((Value <> '') and (Value[1] = '\')) end;
var
TempKey: HKey;
S: string;
Relative: Boolean;
begin
S := Key;
Relative := IsRelative(S);
if not Relative then Delete(S, 1, 1);
TempKey := 0;
   Result := RegOpenKeyEx(GetBaseKey(Relative), PChar(S), 0,
     KEY_READ, TempKey) = ERROR_SUCCESS;
 if Result then begin
    if (CurrentKey <> 0) and Relative then S := CurrentPath + '\' + S;
    ChangeKey(TempKey, S);
   end;
end;
 
function GetBIOSDate : string;
const
BIOSDatePtr
= $0ffff5;
SystemKey = 'HARDWARE\DESCRIPTION\System';
BiosDateParam = 'SystemBiosDate';
var
p : pointer;
s : string[128];
begin
if OSisNT then begin
    with TRegistryRO.Create do try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKeyRO (SystemKey) then begin
        s := ReadString (BiosDateParam);
       end;
      finally Free;
     end; { of try}
   end
 else try
     s[0] := #8;
     p := Pointer(BIOSDatePtr);
     Move (p^, s[1], 8);
    except FillChar (s[1],
8, '9');
   end; { of try}
Result := copy (s, 1, 2) + copy (s, 4, 2) + copy (s, 7, 2);
end;
 
function GetVideoDate : string;
const
VideoDatePtr = $0C0000;
SystemKey = 'HARDWARE\DESCRIPTION\System';
VideoDateParam = 'VideoBiosDate';
var
p : pointer;
s : string[255];
begin
if OSisNT then begin
    with TRegistryRO.Create do try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKeyRO (SystemKey)
       then s := ReadString (VideoDateParam)
       else s := 'NT/de/tected';
      finally Free;
     end; { of
try}
   end
 else try
     s[0] := #255;
     p := Pointer(VideoDatePtr + 60); { первые $60 - строка CopyRight}
     Move (p^, s[1], 255);
     if pos('/', s) > 2 then s := copy (s, pos('/', s) - 2, 8)
      else begin
        p := Pointer(VideoDatePtr + 60 + 250);
        Move (p^, s[1], 255);
        if pos('/', s) > 2 then s := copy (s, pos('/', s) - 2, 8);
       end;
    except FillChar (s[1], 8, '9');
   end; { of try}
Result := copy (s, 1, 2) + copy (s, 4, 2) + copy (s, 7, 2);
end;

Code:

unit WAPIInfo;
 
interface
 
uses
Registry, SysUtils, Windows;
 
procedure GetOSVerInfo (var OSID : DWORD; var OSStr : string);
function OSisNT : boolean;
procedure GetCPUInfo (var CPUID : DWORD; var CPUStr : string);
procedure GetMemInfo (var MemStr : string);
 
implementation
 
procedure GetOSVerInfo (var OSID : DWORD; var OSStr : string);
var
OSVerInfo : TOSVersionInfo;
Reg : TRegistry;
s : string;
begin
OSVerInfo.dwOSVersionInfoSize := SizeOf (OSVerInfo);
GetVersionEx (OSVerInfo);
OSID := OSVerInfo.dwPlatformID;
case OSID of
   VER_PLATFORM_WIN32S : OSStr := 'Windows 3+';
   VER_PLATFORM_WIN32_WINDOWS : OSStr := 'Windows 95+';
  VER_PLATFORM_WIN32_NT : begin
     OSStr := 'Windows NT';
     Reg := TRegistry.Create;
     Reg.RootKey := HKEY_LOCAL_MACHINE;
     if Reg.OpenKey ('SYSTEM\CurrentControlSet\Control\', False)
       then try
        s := Reg.ReadString ('ProductOptions')
       except s := ''
      end;
     if s = 'WINNT' then OSStr := OSStr + ' WorkStation'
     else if s = 'SERVERNT' then OSStr := OSStr + ' Server 3.5 & hi'
     else if s = 'LANMANNT' then OSStr := OSStr + ' Advanced server 3.1';
     Reg.Free;
 
end;
 end;
with OSVerInfo do OSStr := OSStr + Format (' %d.%d (выпуск %d)',
  [dwMajorVersion, dwMinorVersion, LoWord(dwBuildNumber)]);
end;
 
function OSisNT : boolean;
var
s : string;
i : DWORD;
begin
GetOSVerInfo (i, s);
Result := (i = VER_PLATFORM_WIN32_NT);
end;
 
procedure GetCPUInfo (var CPUID : DWORD; var CPUStr : string);
var SI : TSystemInfo;
begin
GetSystemInfo (SI);
CPUID := SI.dwProcessorType;
case CPUID of
   386: CPUStr := '80386-совместимый процессор';
   486: CPUStr := '80486-совместимый процессор';
   586: CPUStr := 'Pentium-совместимый процессор';
 
else CPUStr := 'Неизвестный процессор';
 end;
{  case SI.wProcessorArchitecture of
   PROCESSOR_ARCHITECTURE_INTEL: ;
   MIPS
   ALPHA
   PPC
   UNKNOWN
  end;}
end;
 
procedure GetMemInfo (var MemStr : string);
var MemInfo : TMemoryStatus;
begin
MemInfo.dwLength := SizeOf (MemInfo);
GlobalMemoryStatus (MemInfo);
with MemInfo do MemStr := Format ('ОЗУ: %0.2f M (свободно %0.2f M)'#$d+
 ' Файл подкачки: %0.2f M (свободно: %0.2f M)'#$d,
  [(dwTotalPhys div 1024) / 1024,
   (dwAvailPhys div 1024) / 1024,
   (dwTotalPageFile div 1024) / 1024,
   (dwAvailPageFile div 1024) / 1024]);
end;
 
end.

PS Возможно, эти процедуры не всегда дату возвращают но то что практически всегда для разных материнских/видео плат возвращаются разные значения - проверено, что мне собственно и требовалось.

Andrey Sorokin from sunny Saint-Petersburg anso@mail.ru

Russian Technology http://attend.to/rt anso@rt.spb.ru

Автор: Song

Взято из http://forum.sources.ru

Статья Получить информацию о BIOSе раздела ОС и Железо BIOS может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: BIOS ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
29.03.2024 00:40:09/0.0044388771057129/2