Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 09.01.04 13:03

Вышел очередной дайджест форумов. Скачать можно здесь
Лучшее из нашего FAQ   |x|
Как получить информацию о БИОСе?
Вот пример как можно даты БИОС материнской платы и видеокарты выдрать.
То же самое можно с названием производителя и версией.
В WinNT приходится читать не из ПЗУ а из реестра но это достаточно надежно
- соотв ключи WinNT закрывает на запись и обновляет при каждом старте (?).
Для Win9x можешь хоть весь БИОС напрямую читать.

   Получить заводской номер винчестера (не тот что getvolumeinfo дает) ИМХО
невозможно - порты IDE даже Win9x блокирует.

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;

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

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • Как изменить высоту Items'ов в TTreeView?
    Господа, собственно subj... Вариант с присвоением пустого Images нужных размеров не предлагать, нужно просто поменять ...
  • замена стандартных модулей на Kol
    В приложении (консольном)используюся модули: Windows, SysUtils, Classes. Установил все из архивов kol и mck. В ...
  • 3d-графика, где взять компонент
    Необходимо построить график, использующий 3 оси координат, а не просто объемный ху график,который предлагает ...
  • GLScene - Дырка :)
    Help, please! Ребяты кто знаком c GLScene, поможите плиз моему горю... Хочу сделать следующее: 1. нарисовать куб или ...
  • Объекты на форме VS мышь.
    Можно ли определить над каким объектом находится сейчас указатель мыши(Tedit, Tlabel, etc).?
  • Проблема с IBDataSet
    Уважаемые мастера, возможно мой вопрос покажется элементарным и глупым, но во-первых в IB это мои первые шаги, а ...
  • Лоток принтера
    Доброго всем утра! Господа, может, кто пожскажет, как узнать, какой лоток в свойствах принтера выбран для печати? ...
У нас большой выбор статей   |x|
Функции Windows API для работы с посторонними окнами
Эта статья будет посвящена функциям для работы с окнами других программ. Для работы с окнами Windows предоставляет большое количество функций, которые описаны в модуле Windows.pas, и экспортируются из Windows'овских библиотек (DLL - Dynamic Link Library). Конечно, в рамках одной статьи нельзя рассмотреть ВСЕ функции API, поэтому здесь будут рассмотрены только некоторые из них. Вот они...
Новинки книжного рынка   |x|
Shareware : профессиональная разработка и продвижение программ
Рассматриваются особенности создания условно-бесплатных программ, приводятся рекомендации по разработке интерфейса и оформлению документации, обсуждаются теоретические и практические вопросы проектирования, рекламы, маркетинга и технической поддержки создаваемого программного продукта. Книга содержит примеры удачной разработки и реализации программ из мировой и российской практики. Множество иллюстраций дает возможность более наглядно представить объем и качество работы, необходимой для создания программ на профессиональном уровне.
Автор: Жарков С.
Другие сайты о DELPHI   |x|
MDM Software Presents... Delphi
Программирование на Delphi, FAQ по теме, ссылки, компоненты, программы и многое другое.

» Оценка сайта: 2
Опрос населения :)
Какой сайт по Delphi лучший?
»»» Королевство Дельфи
»»» Этот сайт
»»» Дельфи. Вокруг да около
»»» Другой
»»» Чем больше, тем лучше!
Для души

Хокку дня
Кузнечик зеленый,
О чем ты кузнечишь? -
О зеленой, должно быть, тоске...

Афоризмы
Удивительно, как это жрецы-предсказатели, взглянув друг на друга, могут еще удержаться от смеха.... (Цицерон)

Фраза дня
Рожденный ползать, уйди со взлетной полосы!!!

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В провинции Нова Скотия запрещается поливать лужайки во время дождя.
В городе Крафорд в Нью Джерси (США) запрещается парковать катера и лодки на лужайках.

И на закуску коротенький анекдот
Проект 21 века! Эстонцы переписывают китайцев.

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=52351


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное