Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ И ОФОРМЕЛНИЮ ПРАКТИЧЕСКОЙ РАБОТЫ




Практичне заняття №7

 

1. Тема: Тест стабільності ПК.

 

2. Мета: Навчитися тестувати персональний комп’ютер на пердмет стабільності його роботи та аналізувати результати тесту.

 

3. Технічне забезпечення: ПЕОМ IBM PC AT

 

4. Теоретичні відомості:

Иногда Delphi-приложениям может не хватать функциональной полноты стандартной библиотеки компонентов и тогда бывает необходимо обратиться к Microsoft Win32 API (Application Programming Interface - интерфейса взаимодействия прикладной программы с операционной системой). Почти все функции из Microsoft Win32 API описаны в модуле windows.pas (который по умолчанию включается в cекцию uses новых модулей). Cледует заметить, что часть из этих функции ведет себя по разному в зависимости от текущей операционной системы (Windows 95, 98, NT).

Разработаем программу, показывающую нам некоторую системную информацию о компьютере. В частности, хотелось бы получить информацию о версии ОС, ее директориях, свойствах экрана, ресурсах памяти, имени пользователя и компьютера, дате BIOS. ]

Визуальное расположение объектов в программе

На рисунке представлено дерево объектов Delphi, которые использовались в программе, с названиями. В программе использовались компоненты: Panel, Label, PageControl.

В программе использованы следующие библиотеки:

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, Mask;

 

Рассмотрим текст программы. В список включаемых модулей uses добавим registry. Добавим описание процедур в раздел public описания TfmMain.

type TfmMain = class(TForm) ... procedure FormCreate(Sender: TObject); procedure Change(Sender: TObject); private { Private declarations } public { Public declarations } KeyboardDelay, KeyboardSpeed, ScreenSaveTimeOut : integer; procedure BIOSInfo(OS : string); procedure HardwareInfo; procedure MemoryInfo; procedure VideoInfo; procedure OSInfo; procedure HDDInfo; end; var fmMain: TfmMain; implementationuses Registry;{$R *.DFM}

Сначала получим информацию о компьютере. Используем функцию GetComputerName для получения имени компьютера, функцию GetUserName для получения имени пользователя и функцию GetSystemInfo для получения информации о процессоре (наиболее полно данная функция реализована в Windows NT, где она возвращает и кол-во процессоров и их тип и т.д.).

Для получения информации от таковой частое процессора использовалась функция GetCPUSpeed.

 

// Информация о HardWare.

procedure TfmMain.HardwareInfo;

// Функция Определение тактовой частоты процессора.

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;

 

var Size    : cardinal;

PRes    : PChar;

BRes    : boolean;

lpSystemInfo : TSystemInfo;

begin

// Имя компьютера

Size := MAX_COMPUTERNAME_LENGTH + 1;

PRes := StrAlloc(Size);

BRes := GetComputerName(PRes, Size);

if BRes then laCompName_.Caption := StrPas(PRes);

// Имя пользователя

Size := MAX_COMPUTERNAME_LENGTH + 1;

PRes := StrAlloc(Size);

BRes := GetUserName(PRes, Size);

if BRes then laUserName_.Caption := StrPas(PRes);

  // Процессор

GetSystemInfo(lpSystemInfo);

laCPU_.Caption := 'x' + IntToStr(lpSystemInfo.dwProcessorType);

laCPUFer_.Caption:= FloatToStr( Round (GetCPUSpeed))+' Гц'

end;

Перейдем к параметрам экрану. Здесь мы будем использовать и Win32 API функции и стандартные объекты VCL. Так для получения разрешения экрана нам понадобится объект TScreen (его свойства Width и Height). Остальные параметры мы получим через контекст драйвера устройства DC используя функцию GetDeviceCaps.

Также будет интересна информация о памяти. Здесь нам поможет функция GlobalMemoryStatus, возвращающая информацию по объему физической и виртуальной памяти.

Узнаем информацию о ОС. Функция GetWindowsDirectory вернет путь к каталогу, где установлена система, функция GetSystemDirectory - к системному каталогу. Для определения версии ОС воспользуемся функцией GetVersionEx.

 

// Информация о Windows.

procedure TfmMain.OSInfo;

var PRes            : PChar;

Res             : word;

BRes            : boolean;

lpVersionInformation : TOSVersionInfo;

c, ver          : string;

begin

// Каталог, где установлена Windows

PRes := StrAlloc(255);

Res := GetWindowsDirectory(PRes, 255);

if Res > 0 then laWinDir_.Caption := StrPas(PRes);

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

Res := GetSystemDirectory(PRes, 255);

if Res > 0 then laSysDir_.Caption := StrPas(PRes);

// Имя ОС

lpVersionInformation.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);

BRes := GetVersionEx(lpVersionInformation);

if BRes then

with lpVersionInformation do case dwPlatformId of

VER_PLATFORM_WIN32_WINDOWS :

if dwMinorVersion=0 then c := 'Windows 95' else c := 'Windows 98';

VER_PLATFORM_WIN32_NT : c := 'Microsoft Windows XP';

VER_PLATFORM_WIN32s : c := 'Win 3.1 with Win32s'

end;

lpVersionInformation.dwOSVersionInfoSize := SizeOf(lpVersionInformation);

if GetVersionEx(lpVersionInformation) then

ver:= IntToStr(lpVersionInformation.dwMajorVersion) + '.'+IntToStr(lpVersionInformation.dwMinorVersion)+ '.'+ IntToStr( lpVersionInformation.dwBuildNumber);

laNameOS_.Caption:= c;

laVersion_.Caption := ver;

laUpdOs_.Caption:= lpVersionInformation.szCSDVersion;

// Дата создания BIOS-а

if c='Microsoft Windows XP' then BIOSInfo('NT') else BIOSInfo('95');

end;

 

В предыдущем отрывке программы присутствовал  вызов функции BIOSInfo с параметром, характеризующем текущую ОС. Опишем эту функцию. Важно отметить, что способ получения информации о дате BIOS различен. Для NT получим информацию из реестра, а для Windows 95/98 из соответствующего участка памяти. Эти два способа взаимоисключаемы, так как у Windows 95/98 нет соответствующего раздела реестра, а прямой доступ к памяти в NT невозможен.

Процедура описывающая размер каждого логического радела жесткого диска и свободного места на нем назевается HDDInfo с помощью функций DiskSize, DiskFree.

 

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

procedure TfmMain.HDDInfo;

var i, TotFS, TotS: Integer;

begin

laHHDdisk_.Caption:='';

TotFS:=0;

TotS:=0;

for i:=3 to 30 do

begin

if DiskSize(i) <> -1 then

begin

laHHDdisk_.Caption:= laHHDdisk_.Caption + Chr(64+i)+ ' : ' + IntToStr( Trunc(DiskSize(i)/1024/1024))+' Мб ('+ IntToStr( Trunc(DiskFree(i)/1024/1024))+ ' Мб свободно)' + #13#10;

end;

end;

end;

 

И ,наконец, вызовем все эти процедуры при создании формы.

 

 

Внешний вид запущенной программы приведен на рисунке.

 


5. Завдання:

1) Создать программу, в среде Delphi,  отображающею информации о ПК используя методические указания.

2) Самостоятельно реализовать отображение общего объема жесткого диска и количества свободного места на нем.

3) Оформить отчет, ответить на контрольные вопросы в тетрадь.


ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ И ОФОРМЕЛНИЮ ПРАКТИЧЕСКОЙ РАБОТЫ

Сдать работу с экрана.










Последнее изменение этой страницы: 2018-06-01; просмотров: 153.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...