strcat (lpszSystemInfo, inet_ntoa (adr. sin_addr));
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
nAdapter++;
}
}
WSACleanup (); }
}
SendMessage (StaticText, WM_SETTEXT, 0, (LPARAM) lpszSystemInfo);
}
Информация о принтерах компьютера.
Для получения информации принтерах компьютера, предназначена функция PrinterInfo ().
void PrinterInfo ()
{
LPTSTR lpszSystemInfo = new char [BUFSIZE]; // указатель на строку, в которой
for (int a=0; a<BUFSIZE; a++)
lpszSystemInfo [a] = '\0';
PRINTER_INFO_2 printinfo;
char pname [100];
char strpPrinterName [100], strpPortName [100], strpDriverName [100], strpPrintProcessor [100];
printinfo. pPrinterName = strpPrinterName;
printinfo. pPortName = strpPortName;
printinfo. pDriverName = strpDriverName;
printinfo. pPrintProcessor = strpPrintProcessor;
PRINTER_INFO_2 *Pr;
DWORD byteNeed = 0,prCount=0; // Кол-во необходимых байт, количество принтеров
// Делаем первый вызов с буфером NULL, чтоб узнать нужный размер буфера
системная информация компьютер программа
EnumPrinters (PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2,NULL,0,&byteNeed,&prCount);
// Создаембуфер
Pr = new PRINTER_INFO_2 [byteNeed];
// Делаем второй вызов уже с нужным буфером
if (EnumPrinters (PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2, (LPBYTE) Pr,byteNeed,&byteNeed,&prCount))
{
for (int i = 0; i < prCount; ++i)
{
strcat (lpszSystemInfo, "Установленные принтеры: \t");
strcat (lpszSystemInfo, Pr [i]. pPrinterName);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Порт принтера: \t\t");
strcat (lpszSystemInfo, Pr [i]. pPortName);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Драйверпринтера: \t");
strcat (lpszSystemInfo, Pr [i]. pDriverName);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Процессорпечати: \t");
strcat (lpszSystemInfo, Pr [i]. pPrintProcessor);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
SendMessage (StaticText, WM_SETTEXT, 0, (LPARAM) lpszSystemInfo);
}
}
delete Pr;
}
Информация о видеорежиме компьютера.
Для получения информации о видеорежиме компьютера, предназначена функция DxInfo ().
void DxInfo ()
{
LPTSTR lpszSystemInfo = new char [BUFSIZE]; // указатель на строку, в которой
for (int a=0; a<BUFSIZE; a++)
lpszSystemInfo [a] = '\0';
char *tmp = new char [20];
GUID *lpGUID;
LPDIRECTDRAW lplpDD;
DirectDrawCreate (0,&lplpDD,NULL);
DDSURFACEDESC pDDS;
ZeroMemory (&pDDS, sizeof (DDSURFACEDESC));
pDDS. dwSize = sizeof (DDSURFACEDESC);
lplpDD->GetDisplayMode (&pDDS);
strcat (lpszSystemInfo, "Информация о текущем видеорежиме: ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
lpszSystemInfo [n_long+2] = 13;
lpszSystemInfo [n_long+3] = 10;
itoa (pDDS. dwHeight, tmp,
10);
strcat (lpszSystemInfo, "Количество точек по вертикали: \t");
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
itoa (pDDS. dwWidth, tmp,
10);
strcat (lpszSystemInfo, "Количество точек по горизонтали: \t");
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
itoa (pDDS. dwRefreshRate, tmp,
10);
strcat (lpszSystemInfo, "Частотаобновления, Гц: \t\t");
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
itoa (pDDS. dwAlphaBitDepth, tmp,
10);
strcat (lpszSystemInfo, "Глубинаальфа-буффра (бит/пиксел): \t");
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
itoa (pDDS. ddpfPixelFormat. dwRGBBitCount, tmp,
10);
strcat (lpszSystemInfo, "ГлубинаRGB цвета (бит/пиксел): \t");
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
itoa (pDDS. ddpfPixelFormat. dwZBufferBitDepth, tmp,
10);
strcat (lpszSystemInfo, "ГлубинаZ-буффра (бит/пиксел): \t");
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
itoa (pDDS. ddpfPixelFormat. dwAlphaBitDepth, tmp,
10);
strcat (lpszSystemInfo, "Глубинаальфа-канала (бит/пиксел): \t");
strcat (lpszSystemInfo, tmp);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
SendMessage (StaticText, WM_SETTEXT, 0, (LPARAM) lpszSystemInfo);
}
Информация о дисках компьютера.
Для получения информации о дисках компьютера, предназначена функция DrivesInfo ().
void DrivesInfo ()
{
LPTSTR lpszSystemInfo = new char [BUFSIZE]; // указатель на строку, в которой
for (int a=0; a<BUFSIZE; a++)
lpszSystemInfo [a] = '\0';
char cDevices [] = "A: \";
DWORD dwDevices = GetLogicalDrives (); // получаемвселогическиедиски
bool flag = false;
for (int i = 0; dwDevices; i++) // проверяемнаналичиедисков
{
if (dwDevices & 1)
{
cDevices [0] = 'A' + i;
flag = true;
}
if (flag)
{
flag = false;
strcat (lpszSystemInfo, "Диск ");
strcat (lpszSystemInfo, cDevices);
strcat (lpszSystemInfo, " ");
int n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
UINT type = GetDriveType (cDevices);
switch (type)
{
case DRIVE_UNKNOWN:
strcat (lpszSystemInfo, "Неизвестныйтип");
break;
case DRIVE_NO_ROOT_DIR:
strcat (lpszSystemInfo, "Не правильный путь");
break;
case DRIVE_REMOVABLE:
strcat (lpszSystemInfo, "Съёмныйдиск");
break;
case DRIVE_FIXED:
strcat (lpszSystemInfo, "Жесткийдиск");
break;
case DRIVE_REMOTE:
strcat (lpszSystemInfo, "Удалённыйилиnetwork диск. ");
break;
case DRIVE_CDROM:
strcat (lpszSystemInfo, "CD-ROM диск");
break;
case DRIVE_RAMDISK:
strcat (lpszSystemInfo, "RAM диск");
break;
}
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
char VolumeNameBuffer [100];
VolumeNameBuffer [0] = '\0';
char FileSystemNameBuffer [100];
FileSystemNameBuffer [0] = '\0';
unsigned long VolumeSerialNumber;
BOOL GetVolumeInformationFlag = GetVolumeInformation (
cDevices,
VolumeNameBuffer,
100,&VolumeSerialNumber,
NULL, // &MaximumComponentLength,
NULL, // &FileSystemFlags,
FileSystemNameBuffer,
100
);
strcat (lpszSystemInfo, "Имядиска: ");
strcat (lpszSystemInfo, VolumeNameBuffer);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
char *serial = new char [20];
serial [0] = '\0';
itoa (VolumeSerialNumber, serial,
10);
strcat (lpszSystemInfo, "Серийныйномер: ");
strcat (lpszSystemInfo, serial);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
strcat (lpszSystemInfo, "Файловаясистема: ");
strcat (lpszSystemInfo, FileSystemNameBuffer);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long] = 13;
lpszSystemInfo [n_long+1] = 10;
if (type! = DRIVE_FIXED)
{
dwDevices >>= 1;
continue;
}
DWORD FreeBytesAvailable;
DWORD TotalNumberOfBytes;
DWORD TotalNumberOfFreeBytes;
BOOL GetDiskFreeSpaceFlag = GetDiskFreeSpaceEx (
cDevices, // directory name
(PULARGE_INTEGER) &FreeBytesAvailable, // bytes available to caller
(PULARGE_INTEGER) &TotalNumberOfBytes, // bytes on disk
(PULARGE_INTEGER) &TotalNumberOfFreeBytes // free bytes on disk
);
if (GetDiskFreeSpaceFlag! = FALSE)
{
char * free = new char [20];
itoa ( (unsigned long int) FreeBytesAvailable, free,
10);
char * total = new char [20];
itoa ( (unsigned long int) TotalNumberOfBytes, total,
10);
char * avaliable = new char [20];
itoa ( (unsigned long int) TotalNumberOfFreeBytes, avaliable,
10);
strcat (lpszSystemInfo, "Свободно: ");
strcat (lpszSystemInfo, free);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Общийобъем: ");
strcat (lpszSystemInfo, total);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
strcat (lpszSystemInfo, "Доступно ");
strcat (lpszSystemInfo, avaliable);
strcat (lpszSystemInfo, " ");
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
n_long = strlen (lpszSystemInfo);
lpszSystemInfo [n_long-2] = 13;
lpszSystemInfo [n_long-1] = 10;
}
}
dwDevices >>= 1;
}
Для начала выполнения программы запустите файл SysInfo. exe. На экране появится окно с простым интерфейсом которое представлено на рисунке 3.1, в котором с левой стороны информация об оборудовании компьютера по отдельным пунктам, а именно:
системная информация;
оперативная память;
информация о процессоре;
IPадрес машины;
информация о принтерах;
текущий видеорежим;
информация о локальных дисках.
Справа же будет отображаться подробная информации по тому или иному пункту.
Рисунок 3.1 - Внешний вид главного окна программы
Данный курсовой проект разработан для изучения современных средств разработки приложений для операционной системы Windows.
В процессе разработки компьютерной программы получены навыки постановки задачи для решения ее программным способом, выбора и разработки соответствующих алгоритмов, составления, отладки и тестирования программы в рамках примененной технологии программирования, использования справочной литературы при изучении новых программных продуктов, закрепления практических навыков в оформлении документации на каждом этапе разработки.
В частности, были решены задачи корректной работы приложения, правильного выведения необходимой информации на экран.
Можно сказать, что поставленное при курсовом проектировании задание было реализовано полностью.
Недостатками результирующего программного средства являются:
недостаточная гармоничность и привлекательность графической составляющей проекта;
небольшие задержки при выполнении приложения на компьютерах с малым объемом оперативной памяти;
Данные недостатки могли бы быть исправлены при наличии более широких знаний и навыков решения задач подобного рода.
1. Павловская Т.А. С/C++. Программирование на языке высокого уровня. СПб: Издательство "Питер", 2001. - 464с.
2. Глушаков С.В., Коваль А.В., Черпнин С.А. Программирование на VisualC++: Издательство "Фолио", 2002. - 721с. - (Учебный курс).
3. Бондарено В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования: Издательство "Фолио", 1997. - 368с.
4. http://msdn. microsoft.com/
5. http://intuit.ru/
6. http://windxp.ru/
7. ДСТУ 3008-95 "ЗВІТИ У СФЕРІ НАУКИ І ТЕХНІКИ. Структура та правила оформлення".
main. cpp
#include<windows. h> // подключение библиотеки с функциями API
#include "resource. h"
#include "Index. h"
#include <fstream. h>
#include <ddraw. h>
#defineId_List4002
// Глобальные переменные:
HINSTANCE hInst; // Указатель приложения
LPCTSTR szWindowClass = "SysInfo";
LPCTSTRszTitle= "Информация о системе";
LPCTSTRlpText= "Программа для получения информации о системе\nВерсия: 1.0\n2009";
LPCTSTRlpCaption= "О программе";
HWNDListbox;
HWND StaticText;