Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС СФМЭИ.doc
Скачиваний:
22
Добавлен:
17.09.2019
Размер:
1.37 Mб
Скачать

1.3. Создание приложения для получения характеристик компьютера и операционной системы

  1. Создайте проект (New Application), изображенный на рисунке 1.1

  1. Перенесите на форму компоненты, перечисленные в таблице 1.5.

  2. Для события формы OnCreate запишите следующий программный код:

procedure TForm1.FormCreate(Sender: TObject);

VAR

v:TOSVERSIONINFO;

reg:TRegistry;

a:Array[0..255] of Char;

begin

Edit1.Text:='C:\';

// Информация об операционной системе

v.dwOSVersionInfoSize:=Sizeof(OSVERSIONINFO);

GetVersionEx(v);

Edit6.Text:=IntToStr(v.dwMajorVersion)+'.'+IntToStr(v.dwMinorVersion);

Edit7.Text:=IntToStr(v.dwBuildNumber);

Edit8.Text:=v.szCSDVersion;

case v.dwPlatformId of

VER_PLATFORM_WIN32s: Edit9.Text:='Win32s on Windows 3.1.';

VER_PLATFORM_WIN32_WINDOWS: Edit9.Text:='Win32 on Windows 95.';

VER_PLATFORM_WIN32_NT: Edit9.Text:='Win32 on Windows NT.';

end;

// Определение, из какого каталога инсталлировалась Windows

reg:=TRegistry.Create;

reg.RootKey:=HKEY_LOCAL_MACHINE;

reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Setup',false);

Edit10.Text:=reg.ReadString('SourcePath');

reg.CloseKey;

reg.Free;

// Системные каталоги

GetSystemDirectory(@a,Sizeof(a));

Edit11.Text:=a;

GetWindowsDirectory(@a,Sizeof(a));

Edit12.Text:=a;

end;

Таблица 1.5 Компоненты создаваемого приложения

Компонент

Класс

Описание

1

2

3

GroupBox1

GroupBox

Информация о диске

GroupBox2

GroupBox

Тактовая частота процессора

GroupBox3

GroupBox

Операционная система

Label1

Label

Введите имя диска

Label2

Label

Серийный номер

Label3

Label

Имя тома

Label4

Label

Максимальное количество символов в именах файлов и каталогов

Edit1

Edit

Окно ввода имени диска

Edit2

Edit

Окно выводи серийного номера диска

Edit3

Edit

Окно вывода имени тома

Edit4

Edit

Окно вывода максимального количества символов в именах файлов и каталогов

Button1

TButton

Кнопка «Получить».

Edit5

Edit

Окно вывода тактовой частоты процессора

Button2

TButton

Кнопка «Определить»

Label5

Label

Версия ОС

Label6

Label

Номер ОС

Label7

Label

Service Pack

Label8

Label

Платформа

Продолжение таблицы 1.5

1

2

3

Label9

Label

Windows инсталл. из каталога

Label10

Label

Системный каталог Windows

Label11

Label

Каталог Windows

Edit6

Edit

Окно вывода версии ОС

Edit7

Edit

Окно вывода номера ОС

Edit8

Edit

Окно вывода версии Service Pack

Edit9

Edit

Окно вывода платформы ОС

Edit10

Edit

Окно вывода каталога, из которого инсталлировалась ОС Windows

Edit11

Edit

Окно вывода системного каталога (каталога, в котором содержатся системные библиотеки, драйверы и файлы шрифтов)

Edit12

Edit

Окно вывода каталога Windows (каталога, в котором содержатся файлы инициализации, файлы помощи и стандартные приложения Windows)

  1. Для события формы OnClick кнопки «Получить» запишите следующий программный код:

procedure TForm1.Button1Click(Sender: TObject);

VAR

SerialNum:DWORD;

a,b:DWORD;

Buffer,disk :Array[0..255]of char;

begin

StrPCopy(@disk,Edit1.text);

if GetVolumeInformation(@disk,Buffer,sizeof(Buffer),@SerialNum,a,b,nil,0) then

begin

Edit2.Text:=IntToStr(SerialNum);

Edit3.Text:=Buffer;

Edit4.Text:=IntToStr(a);

end;

end;

  1. Для получения тактовой частоты процессора включите в проект следующую функцию:

function GetCPUSpeed: Double;

const

DelayTime = 500;

var

TimerHi: DWORD;

TimerLo: DWORD;

PriorityClass: Integer;

Priority: Integer;

begin

PriorityClass := GetPriorityClass(GetCurrentProcess);

Priority := GetThreadPriority(GetCurrentThread);

SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

Sleep(10);

asm

DW 310Fh // rdtsc

MOV TimerLo, EAX

MOV TimerHi, EDX

end;

Sleep(DelayTime);

asm

DW 310Fh // rdtsc

SUB EAX, TimerLo

SBB EDX, TimerHi

MOV TimerLo, EAX

MOV TimerHi, EDX

end;

SetThreadPriority(GetCurrentThread, Priority);

SetPriorityClass(GetCurrentProcess, PriorityClass);

Result:=TimerLo/(1000.0 * DelayTime);

end;

  1. Для события формы OnClick кнопки «Определить» запишите следующий программный код:

procedure TForm1.Button2Click(Sender: TObject);

begin

// Получение тактовой частоты процессора

Edit5.Text:=Format('CPU Speed: %f MHz',[GetCpuSpeed]);

end;

  1. Откомпилируйте приложение и проверьте его работу.