Реферат: Утилита диагностики компьютера
Благодаря средствам визуальной разработки можно работать с объектами, держа их перед глазами и получая результаты практически сразу. Способность видеть объекты такими, какими они появляются в ходе исполнения программы, снимает необходимость проведения множества операций вручную, что характерно для работы в среде, не обладающей визуальными средствами — вне зависимости от того, является она объектно-ориентированной или нет. После того, как объект помещен в форму среды визуального программирования, все его атрибуты сразу отображаются в виде кода, который соответствует объекту как единице, исполняемой в ходе работы программы.
Размещение объектов в Delphi связано с более тесными отношениями между объектами и реальным программным кодом. Объекты помещаются в вашу форму, при этом код, отвечающий объектам, автоматически записывается в исходный файл. Этот код компилируется, обеспечивая существенно более высокую производительность, чем визуальная среда, которая интерпретирует информацию лишь в ходе исполнения программы.
Глава 2. Разработка алгоритмов
2.1. Разработка алгоритма
![]() |
Рассмотрим алгоритм работы основной программы.
![]() |
В структурной
схеме программы показаны основные взаимосвязи между отдельными модулями
программы.
Глава 3. Эксплуатационная часть
3.1. Руководство программистa
В программе были применены, большое количество компонентов Windows, различные обработчик событий, процедуры и функции. При разработке программы было создано 3 модуля (Main, Diag, Example). В модуле Main былa примененa 1 процедурa.
Краткое описание основных использованных функций
Используем функцию GetComputerName для получения имени компьютера, функцию GetUserName для получения имени пользователя и функцию GetSystemInfo для получения информации о процессоре (наиболее полно данная функция реализована в Windows NT, где она возвращает и кол-во процессоров и их тип и т.д.).
Перейдем к параметрам экрану. Здесь мы будем использовать и Win32 API функции и стандартные объекты VCL. Так для получения разрешения экрана нам понадобится объект TScreen (его свойства Width и Height). Остальные параметры мы получим через контекст драйвера устройства DC используя функцию GetDeviceCaps.
Также будет интересна информация о памяти. Здесь нам поможет функция GlobalMemoryStatus, возвращающая информацию по объему физической и виртуальной памяти.
Узнаем информацию о ОС. Функция GetWindowsDirectory вернет путь к каталогу, где установлена система, функция GetSystemDirectory - к системному каталогу. Для определения версии ОС воспользуемся функцией GetVersionEx.
Опишем функцию BIOSInfo с параметром, характеризующем текущую ОС. Важно отметить, что способ получения информации о дате BIOS различен. Для NT получим информацию из реестра, а для Windows 95/98 из соответствующего участка памяти. Эти два способа взаимоисключаемы, так как у Windows 95/98 нет соответствующего раздела реестра, а прямой доступ к памяти в NT невозможен.
Рассмотрим функцию SystemParametersInfo, которая позволяет управлять некоторыми настройками системы. Область применения данной функции для NT и Windows 95/98 различна. Умышленно выберем некоторую общую часть для обеих систем.
Также можно позволить пользователю изменять и сохранять настройки системы по своему вкусу. Здесь можно использовать функцию SystemParametersInfo. Для компонентов tbKeyboardSpeed, tbKeyboardDelay, cbScreenSaverActive, cbSpeaker, edSSTimeOut в ObjectInspector перейдем на закладку Events и изменим событие OnChange (для tbKeyboardSpeed, tbKeyboardDelay) , OnClick (для cbScreenSaverActive, cbSpeaker) и OnExit для edSSTimeOut на Change.
Использование Delphi совместно c фунциями Microsoft Win32 API позволит программисту создать более функционально богатые и гибкие приложения.
Процедуры модуля Main:
procedure TForm11.Timer1Timer(Sender: TObject);
Данная процедура используется для показа сплэш-окна при начальной загрузке программы. После своего выполнения она показывает главную форму.
Процедуры модуля Diag:
procedure TDiadnostic.AboutClick(Sender: TObject);
Процедура выполняет функцию открытия окна или формы. Это то же можно реализовать двумя способами:
1) Form1.Show;
2) Form1.Visible:=True;
procedure GetPrName(processor1:Tlabel);
Процедура определяет тип процессора.
procedure GetRegInfoWinNT;
Процедура используется для получения информации из реестра Windows. В частности, используется для выода информации о Базовой Системе Ввода-Вывода.
В большинстве случаев очень важной оказывается информация о типе BIOS.
Строка типа BIOS хранится по адресу 0FFA68, а строка даты BIOS по адресу
0FFFF5. Это физические адреса, следовательно адреса
"сегмент:смещение": 0F000:FA68 и 0F000:FFF5.
При включении компьютера BIOS инициализирует свои ресурсы и ищет,
начиная с адреса 0C0000, ПЗУ установленных карт. Каждое ПЗУ имеет подпись,
которая символизируется байтами 55AAh, если BIOS находит эти байты, то он
узнаёт размер ПЗУ, который хранится в следующем байте и содержит число страниц
по 512 байт, после чего по возможности считает контрольную сумму этого ПЗУ (она
должна быть равна нулю) и передаёт управление на 4-ый байт. Также BIOS считает
контрольную сумму байт CMOS, расположенных в ячейках 10h-2Dh. Так как в этих
ячейках хранится важная, для продолжения работы, информация и её повреждения
недопустимы.
Исходя из этого, программа определяет тип BIOS и считает
контрольные суммы Видео ПЗУ и CMOS.
function GetDisplayDevice: string;
данная функция определяет основные параметры видеокарты, такие как размер памяти и строку данных производителя.
function LocalIP : string;
данная функция возвращает IP адрес текущего компьютера.
Function GetCPUSpeed: Double;
Выясняем тактовую частоту процессора.
function CheckDriveType(ch:char): String;
возвращает тип диска (сменный, жесткий)
procedure TDiadnostic.FormCreate(Sender: TObject);
создает главное окно программы
function getprintername:string;
Возвращает имя принтера, сетевого или локального.
procedure TDiadnostic.Button4Click(Sender: TObject);
выполняет обновление информации о состоянии памяти
procedure TDiadnostic.disknameChange(Sender: TObject);
выполняет смену имени диска
procedure TDiadnostic.FormClose(Sender: TObject; var Action: TCloseAction);
Процедура выполняет функцию выхода из программы. Мгновенный выход из программы.
Выход из программы можно организовать несколькими способами, такими как:
- Application.Terminate;
- Form1.Hide;
- Form1.Visible:=False;
- Form1.Close;
Эти команды практически не отличаются друг от друга. Единственным различием может быть то, что первый выход работает гораздо быстрее, т.е. приложение закрывается мгновенно.
function OpenCD(Drive : Char) : Boolean;
выполняет функцию открытия сд-рома
function CloseCD(Drive : Char) : Boolean;
выполняет функцию закрытия сд-рома.
procedure TDiadnostic.SpeedButton1Click(Sender: TObject);
Процедура выполняет функцию открытия окна или формы. В данном случае открывается окно тестирования процессора.
Процедуры модуля Example:
procedure TForm1.Button1Click(Sender: TObject);
выполняет измерение тактовой частоты процессора.
Следует
подробнее рассказать об идентификации процессора. Как известно, в процессорах
пятого поколения, а также в некоторых четвёртого поколения, появилась команда
CPUID. Эта команда позволяет больше узнать об установленном в системе
процессоре. Обмен информацией происходит через основные регистры (EAX, EBX,
ECX, EDX). Параметры задаются через регистр EAX. Таким образом, чтобы узнать
информацию о версии процессора, я записал в EAX 1 и вызвал CPUID, после чего в
EAX хранился результат. Для того, чтобы узнать производителя процессора, я записал
в EAX 0 и вызвал CPUID, после чего в основных регистрах находится, уникальная
для каждого производителя, строка. Для AMD это "AuthenticAMD", для
Intel - "GenuineIntel", для Cyrix - "CyrixInstead". Теперь
расскажу об идентификации процессоров, не имеющих инструкции CPUID. Понятно,
что столь подробную информацию, в этом случае получить невозможно. Т.к.
программа требует процессор не ниже третьего поколения, я начал проверку именно
с этого поколения. Наличие 386-го процессора определяется недоступностью для
записи 18-го бита регистра флагов, если бит доступен для записи, то я проверяю
наличие поддержки команды CPUID, если она не поддерживается, то процессор
486-ой. Если же CPUID поддерживается, то дальше всё определение ложится именно
на эту команду.
Наличие поддержки команды CPUID определяется доступностью для
записи 21-го бита регистра флагов.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8