Содержание материала

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;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить