Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ И ОФОРМЕЛНИЮ ПРАКТИЧЕСКОЙ РАБОТЫСтр 1 из 2Следующая ⇒
Практичне заняття №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;
И ,наконец, вызовем все эти процедуры при создании формы.
Внешний вид запущенной программы приведен на рисунке.
1) Создать программу, в среде Delphi, отображающею информации о ПК используя методические указания. 2) Самостоятельно реализовать отображение общего объема жесткого диска и количества свободного места на нем. 3) Оформить отчет, ответить на контрольные вопросы в тетрадь. ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ И ОФОРМЕЛНИЮ ПРАКТИЧЕСКОЙ РАБОТЫ Сдать работу с экрана. |
||
Последнее изменение этой страницы: 2018-06-01; просмотров: 152. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |