Сведения о процессоре хранятся в реестре в ключе HKEY_LOCAL_MACHINE \ HARDWARE \ DESCRIPTION \ System \ CentralProcessor\0. Там имеются параметры, характеризующие процессор: Identifier - идентификатор процессора, Vendorldent-ifier - производитель и ряд других.

Имеется и иная возможность получить информацию о процессоре - функция GetSystemlnfo, объявленная в модуле Windows следующим образом:

procedure GetSystemlnfo(var lpSystemlnfо: TSystemlnfo);
stdcall;

Единственный параметр этой функции указывает на запись типа TSystemlnfo. Рассматривать все поля этой записи мы не будем. Ограничимся теми, которые могут пригодиться для решения нашей задачи - получения информации о типе процессора.

Поле dwNumberOfProcessors указывает число процессоров в системе. Поле dwProcessorType указывает тип процессора. Это поле используется в Windows 9.x. В Windows NT оно оставлено только для совместимости с Windows 9.x, и рекомендуется вместо него использовать описанные далее поля wProcessorArchitecture, wProcessorLevel и wProcessorRevision. Значение поля dwProcessorType может быть одним из следующих:

процессор,

совместимый с 80386

процессор,

совместимый с 80486

процессор,

совместимый с Pentium

Иные значения не относятся к персональным компьютерам Intel.

Поле wProcessorArchitecture указывает архитектуру процессора. Значение 0 соответствует архитектуре Intel, 1 - архитектуре MIPS, 2 - архитектуре ALPHA, 3 - иной, неизвестной архитектуре.

Поле wProcessorLevel в Windows 9.x не используется, а в Windows NT определяет уровень процессора. Его смысл зависит от архитектуры процессора, т.е. от значения поля wProcessorArchitecture. Для архитектуры Intel значение 3 соответствует Intel 80386, 4 - Intel 80486, 5 - Pentium, 6 - Pentium 2 и т.д.

Поле wProcessorRevision указывает версию процессора. Для Intel 80386 и 80486 значения байтов этого поля можно представить как xxyz. Если хх = $FF, то модель определяется как у - $А, а версия равна z. Если хх не равняется $FF, то символ Char(xx + ord('A')) указывает букву модели, а значение yz - версию. Для Intel Pentium, Cyrix и NextGen 586 старшее слово поля wProcessorRevision определяет модель, а младшее поле - версию.

Ниже приведен тестовый пример, иллюстрирующий чтение информации о процессоре. Это фрагмент проекта PInf, который вы найдете в каталоге Windows на приложенном к книге диске. Окно этого приложения во время выполнения показано на рис. 11.9 в разд. 11.17.1. На форме помещено окно RichEditl, в которое при щелчке на кнопке Button 1 заносится соответствующая информация. Код для VCL Win32 выглядит так:

uses registry;
procedure TForml.ButtonlClick(Sender: TObject);
var reg:TRegistry;
S: string;

SI : TSystemlnfo; begin

RichEditl.SelAttributes.Style := [fsBold];
RichEditl.Lines.Add('Процессор');
RichEditl.SelAttributes := RichEditl.DefAttributes;
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;

if reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0', false) then begin

RichEditl.Lines.Add('идентификатор: ' + reg.ReadString('Identifier')) ;

RichEditl.Lines.Add('производитель: ' +

reg.ReadString('Vendorldentifier'));
end;
reg.CloseKey;
reg.Free;

GetSystemlnfo(SI); case SI.dwProcessorType of 386: begin

S := 'процессор, совместимый с 80386, '; if (HiByte(SI.wProcessorRevision) = $FF) then S := S + 'модель ' +

IntToStr((SI.wProcessorRevision and $F0) - $A) + ' версия ' + char(SI.wProcessorRevision and $0F) else S := S + 'версия ' +

char(HiByte(SI.wProcessorRevision) + ord('A')) + IntToStr(SI.wProcessorRevision and $FF) ;

end; 486: begin

S := 'процессор, совместимый с 80486, '; if (HiByte(SI.wProcessorRevision) = $FF) then S := S + 'модель ' +

IntToStr((SI.wProcessorRevision and $F0) - $A) + ' версия ' + char(SI.wProcessorRevision and $0F) else S := S + 'версия ' +

char (HiByte(SI.wProcessorRevision) + ord('A')) + IntToStr(SI.wProcessorRevision and $FF);
end;
586: S := 'процессор, совместимый с Pentium, модель ' + IntToStr(HiByte(SI.wProcessorRevision)) + ' версия ' + IntToStr (SI .wProcessorRevision and $FF) ;■
else S := 'Неизвестный процессор';
end;
RichEditl.Lines.Add(S);
end;

Вряд ли этот код нуждается в комментариях. А результат его выполнения вы можете увидеть на рис. 11.9 в средних строчках окна редактирования.

11.17 Компьютер || Оглавление || 11.17.3 Память


Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Май
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс