Министерство образования и науки Украины
Харьковский национальный университет радиоэлектроники
Компьютерной инженерии и управления
АПВТ
Факультет
Кафедра
Курсовойпроект
пояснительная записка
Информационная система сравнительного анализа работы компьютера
(тема проекта)
2010 г.
Пояснительная записка содержит 21 страницу, 3 части, 1 приложение, 7 источников литературы.
Работа посвящена теме информационная система сравнительного анализа работы компьютера.
Цель - разработать программу, которая смогла бы выводить системную информацию о компьютере, информацию об оперативной памяти, процессоре, ipадрес компьютера, информацию о принтерах, текущем видеорежиме, информацию о дисках.
Реализация задачи потребовала изучения специальных функций для получения информации о системе, а также дополнительных библиотек.
Программа представляет собой приложение, написанное в среде MicrosoftVisualC++.
КЛЮЧЕВЫЕ СЛОВА: СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ, ИНФОРМАЦИЯ О СИСТЕМЕ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, АНАЛИЗА РАБОТЫ КОМПЬЮТЕРА, ИНФОРМАЦИЯ О ПРОЦЕССОРЕ, ФУНКЦИИ ДЛЯ ПОЛУЧЕНИЯ ИНФОРМАЦИИ О СИСТЕМЕ.
Содержание
Реферат
1. Разработка системных программ анализа и управления вычислительной системы
1.1 Разработка алгоритмов анализа работы компьютера
2. Использование программы Sysinfo для анализа работы компьютера
Список используемых источников
Ни для кого не новость, что в мире существует великое множество языков так не похожих друг на друга. Но вот почему-то инженерам-программистам не пришелся по душе не один из существующих и они стали изобретать свои. Так чем же все таки не угодили все язык мира, что их оставили, и стали изобретать новые?
Изучение естественного языка является сложным процессом, включающим как обретение элементарных автоматических навыков, так и восприятие сложных абстрактных понятий. При этом возможность относительно свободного использования языка как средства общения появляется уже на ранних стадиях этого процесса, когда вообще ещё не имеет смысла говорить о знании языка. Многозначность одних и тех же слов есть еще одним недостатком естественных языков, не говоря уже о сочетаниях слов и предложениях, которые в некоторых случаях можно трактовать Nспособами. Таким образом разговорные языки не могут быть применены для задания точных команд и действий.
В данный момент довольно популярным языком программирования является С++. Его используют при написании пользовательских приложений. Это язык высокого уровня, он довольно краток и в то же время дает практически безграничные возможности для решения любых проблем.
С++ - это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Указанные преимущества С++ обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование С++ в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на С++, сравнимы по скорости с программами, написанными на языке ассемблера.
В данном курсовом проекте необходимо разработать программу,которая смогла бы выводить системную информацию о компьютере, информацию об оперативной памяти, процессоре, ipадрес компьютера, информацию о принтерах, текущем видеорежиме, информацию о дисках.
Рассматриваются способы получения системной информации о компьютере. Все функции опираются на Windows API. Робота их подразумевается только под WIN32 (лишь отдельные функции работают под WIN32s).
Информация об основных каталогах.
Три функции дают пути к трем основным каталогам: GetWindowsDirectory - к каталогу ОС, GetSystemDirectory - к системной папке ОС и GetCurrentDirectory - к текущей папке. Эти функции имеют два параметра - путь к папке и размер его представления в памяти.
Информация о пользователе и компьютере.
Имя компьютера позволяет получить функция GetComputerName. В нее передается два параметра - параметр типа PChar, в который записывается имя компьютера и второй параметр, определяющий длину записи под имя. Следующая пользовательская функция выводит имя компьютера:
if (GetComputerName (temp, &cchBuff))
{
strcat (lpszSystemInfo, "Имякомпьютера: \t\t");
strcat (lpszSystemInfo, temp);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
}
Очень похожим способом получается имя пользователя из функции GetUserName:
if (GetUserName (temp, &cchBuff))
{
strcat (lpszSystemInfo, "Имяпользователя: \t");
strcat (lpszSystemInfo, temp);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
}
Информация об операционная системе.
Информация об операционной системе хранится в записи типа ExpandEnvironmentStrings, выглядещей следующим образом:
dwResult = ExpandEnvironmentStrings (
"ТипOS: \t\t\t%OS%",
temp,
BUFSIZE);
Состояние памяти.
Для получения детальной информации о состоянии памяти компьютера предназначена функция API GlobalMemoryStatus. В функцию передается переменная типа MEMORYSTATUS.
Следующая пользовательская функция определяет размер структуры MemoryStatus количество используемой ОЗУ, количество физической памяти, количество свободной физической памяти, количество виртуальной памяти, количество свободной виртуальной памяти:
void MemStat ()
{
MEMORYSTATUS stat;
GlobalMemoryStatus (&stat);
LPTSTR lpszSystemInfo = new char [BUFSIZE]; // указатель на строку, в которой
for (int a=0; a<BUFSIZE; a++)
lpszSystemInfo [a] = '\0'; // будет информация о системе.
char *tmp = new char [32];
strcat (lpszSystemInfo, "РазмерструктурыMemoryStatus \t\t\t");
itoa (stat. dwLength, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Количество используемой ОЗУ,% \t\t\t");
itoa (stat. dwMemoryLoad, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-3] = 13;
lpszSystemInfo [n_long-2] = 10;
strcat (lpszSystemInfo, "Количествофизическойпамяти, Kb \t\t\t");
itoa (stat. dwTotalPhys/DIV, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Свободнофизическойпамяти, Kb \t\t\t");
itoa (stat. dwAvailPhys/DIV, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Количествовиртуальнойпамяти, Kb \t\t\t");
itoa (stat. dwTotalVirtual/DIV, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Количествосвободнойвиртуальнойпамяти, Kb \t");
itoa (stat. dwAvailVirtual/DIV, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
n_long = strlen (lpszSystemInfo);
for (a=0; a<n_long; a++)
SendMessage (StaticText, WM_SETTEXT, 0, (LPARAM) lpszSystemInfo);
}
Информация о процессоре.
Функция GetSystemInfo с единственным параметром типа записи SYSTEM_INFOдает доступ к различной системной информации. В частности, уровень процессора можно узнать из поля записи TSystemInfo - wProcessorLevel. Следующая пользовательская функция определяет количество процессоров (ядер), тип, архитектура, уровень, revisionпроцессора, активная маска процессора:
void CPUInfo ()
{
SYSTEM_INFO siSysInfo;
GetSystemInfo (&siSysInfo);
LPTSTR lpszSystemInfo = new char [4000]; // указательнастроку, вкоторой
for (int a=0; a<BUFSIZE; a++)
lpszSystemInfo [a] = '\0'; // будет информация о системе.
char *tmp = new char [32];
strcat (lpszSystemInfo, "Кличество процессоров (ядер) \t");
itoa (siSysInfo. dwNumberOfProcessors, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Типпроцессора\t\t\t");
itoa (siSysInfo. dwProcessorType, tmp,
10);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Архитектурапроцессора\t\t");
itoa (siSysInfo. wProcessorArchitecture, tmp, 20);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Level процессора\t\t\t");
itoa (siSysInfo. wProcessorLevel, tmp, 20);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Revision процессора\t\t");
itoa (siSysInfo. wProcessorRevision, tmp, 20);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Активная маска процессора \t\t");
itoa (siSysInfo. dwActiveProcessorMask, tmp, 20);
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
n_long = strlen (lpszSystemInfo);
for (a=0; a<n_long; a++)
SendMessage (StaticText, WM_SETTEXT, 0, (LPARAM) lpszSystemInfo);
}
Информация об ipадресе компьютера.
Для получения информации об имени локальной машины, имени доступной локальной машины, ipадресе компьютера, предназначена функция GetCurentIP ().
void GetCurentIP ()
{
LPTSTR lpszSystemInfo = new char [BUFSIZE]; // указатель на строку, в которой
for (int a=0; a<BUFSIZE; a++)
lpszSystemInfo [a] = '\0'; // будет информация о системе.
char *tmp = new char [32];
WSADATA wsaData;
WORD WINSOCK_VERSION;
if (! WSAStartup (WINSOCK_VERSION, &wsaData))
{
char chInfo [64];
if (! gethostname (chInfo,sizeof (chInfo)))
{
strcat (lpszSystemInfo, "Имялокальноймашины: \t\t");
strcat (lpszSystemInfo, chInfo);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
hostent *sh;
sh=gethostbyname ( (char*) &chInfo);
if (sh! =NULL)
{
strcat (lpszSystemInfo, "Имядоступнойлокальноймашины: \t");
strcat (lpszSystemInfo, sh->h_name);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
int nAdapter = 0;
while (sh->h_addr_list [nAdapter])
{
struct sockaddr_in adr;
memcpy (&adr. sin_addr,sh->h_addr_list [nAdapter],sh->h_length);
strcat (lpszSystemInfo, "IP адреслокальноймашины: \t");