Список использованных источников



1 Харт Джонсон. Системное программирование в среде Windows AnyLogic / Харт Джонсон /. – Москва, 2005. – 592с.

2 Саймон Ричардс. Microsoft Windows API Справочник системного программиста/ Саймон Ричардс // М.: Подробное руководство.–Спб, 2014 – 1216 с.

3 Пол Мак-Федрис. Microsoft Windows 7 Unleashed: Подробное руководство/ Пол Мак-Федрис.; Вильямс. – Москва, 2012. – 800 с.

4 Пенкрат, Л.М. Программирование аппаратных средств в Windows / Л.М. Пенкрат// М.: профессиональное программирование.–Спб, 2008 – 528 с.

5 Сбор информации о компьютере [Электронный ресурс]. – 2017. – Режим доступа: http://sysadminblog.ru/code/2011/03/01/c-sbor-informacii-o-kompyutere-2.html – Дата доступа: 24.09.2017.

6 Программирование на C, C# и Java [Электронный ресурс]. – 2017. – Режим доступа: http://vscode.ru/prog-lessons/get-comp-info-wmi.html – Дата доступа: 04.11.2017.

7 Получение информации о ПК [Электронный ресурс]. – 2017. – Режим доступа: http://www.cyberforum.ru/csharp-net/thread254777.html – Дата доступа: 17.11.2017.

Приложение А

Файл kurs . cpp

#include <stdio.h>

#include <tchar.h>

#include <windows.h>

#include <winioctl.h>

#include <stdlib.h>

#include <winsock2.h>

#include <tlhelp32.h>

#include <iphlpapi.h>

#include <Commdlg.h>

#include<Winsock2.h>

 

#pragma comment(lib, "Ws2_32.lib")

#pragma comment(lib, "iphlpapi.lib")

 

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))

#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

#define MAX_LOADSTRING 100

#define MAX_RECORD_BUFFER_SIZE 0x10000

#define MAX_TIMESTAMP_LEN  23 + 1 // mm/dd/yyyy hh:mm:ss.mmm

 

 

// Идентификаторы кнопок и окна редактирования

#define MAX_LOADSTRING 100

#define ID_BUTTON_1 3000

#define ID_BUTTON_2 3001

#define ID_BUTTON_3 3002

#define ID_BUTTON_4 3003

#define ID_BUTTON_5 3004

#define ID_BUTTON_6 3005

#define ID_BUTTON_7 3006

#define ID_BUTTON_8 3007

#define ID_BUTTON_9 3009

#define ID_BUTTON_10 3010

#define ID_BUTTON_11 3011

#define ID_BUTTON_12 3012

#define ID_BUTTON_13 3013

#define ID_BUTTON_14 3014

#define ID_EDIT 3008

 

typedef BOOL (WINAPI *PFUNC)(LPCSTR, DWORD, PDISPLAY_DEVICE, DWORD);

 

// Глобальные переменные

HINSTANCE hInst;                                               

TCHAR szTitle[MAX_LOADSTRING];                       // Заголовок

TCHAR szWindowClass[MAX_LOADSTRING];           // Клас окна

char cBuffer[MAX_RECORD_BUFFER_SIZE];

 

 

HWND hBtn1;                              // Кнопки

HWND hBtn2;

HWND hBtn3;

HWND hBtn4;

HWND hBtn5;

HWND hBtn6;

HWND hBtn7;

HWND hBtn8;

HWND hBtn9;

HWND hBtn10;

HWND hBtn11;

HWND hBtn12;

HWND hBtn13;

HWND hBtn14;

HWND hwndEdit;                            // Окно с информацией

 

ATOM                   MyRegisterClass(HINSTANCE hInstance);

BOOL                   InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);

 

int APIENTRY WinMain(HINSTANCE hInstance,

                HINSTANCE hPrevInstance,

                LPSTR lpCmdLine,

                int  nCmdShow)

{

MSG msg;

 

 

// Загружаем строки

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_KURS, szWindowClass, MAX_LOADSTRING);

// Регистрируем класс окна

MyRegisterClass(hInstance);

 

if (!InitInstance (hInstance, nCmdShow))

{

     return FALSE;

}

 

// Цикл обработки сообщений

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

 

 

// Регистрируем класс окна

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

 

wcex.cbSize = sizeof(WNDCLASSEX);

 

wcex.style         = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra    = 0;

wcex.cbWndExtra    = 0;

wcex.hInstance     = hInstance;

wcex.hIcon         = LoadIcon(hInstance, (LPCTSTR)IDI_KURS);

wcex.hCursor       = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = (LPCSTR)IDC_KURS;

wcex.lpszClassName = szWindowClass;

wcex.hIconSm       = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

 

return RegisterClassEx(&wcex);

}

 

// Инициализация приложения

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

 

hInst = hInstance;

 

// Создаем окно

hWnd = CreateWindow(szWindowClass, "Курсовая работа", WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

 

if (!hWnd)

{

return FALSE;

}

//Создаем кнопки на основном окне

hBtn1 = CreateWindow("BUTTON", "Процессор", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 25, 200, 30, hWnd, (HMENU)ID_BUTTON_1, hInstance, NULL);

hBtn2 = CreateWindow("BUTTON", "BIOS", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 65, 200, 30, hWnd, (HMENU)ID_BUTTON_2, hInstance, NULL);

hBtn3 = CreateWindow("BUTTON", "Разделы HDD", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 105, 200, 30, hWnd, (HMENU)ID_BUTTON_3, hInstance, NULL);

hBtn4 = CreateWindow("BUTTON", "HDD", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 145, 200, 30, hWnd, (HMENU)ID_BUTTON_4, hInstance, NULL);

hBtn5 = CreateWindow("BUTTON", "Клавиатура", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 185, 200, 30, hWnd, (HMENU)ID_BUTTON_5, hInstance, NULL);

hBtn6 = CreateWindow("BUTTON", "Системная плата", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 225, 200, 30, hWnd, (HMENU)ID_BUTTON_6, hInstance, NULL);

hBtn7 = CreateWindow("BUTTON", "Мышь", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 265, 200, 30, hWnd, (HMENU)ID_BUTTON_7, hInstance, NULL);

hBtn8 = CreateWindow("BUTTON", "Видеокарта", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 305, 200, 30, hWnd, (HMENU)ID_BUTTON_8, hInstance, NULL);

hBtn9 = CreateWindow("BUTTON", "Монитор", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 345, 200, 30, hWnd, (HMENU)ID_BUTTON_9, hInstance, NULL);

hBtn10 = CreateWindow("BUTTON", "Сетевые адаптеры", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 385, 200, 30, hWnd, (HMENU)ID_BUTTON_10, hInstance, NULL);

hBtn11 = CreateWindow("BUTTON", "Приложения", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 425, 200, 30, hWnd, (HMENU)ID_BUTTON_11, hInstance, NULL);

hBtn12 = CreateWindow("BUTTON", "Сбор данных в файл", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 465, 200, 30, hWnd, (HMENU)ID_BUTTON_12, hInstance, NULL);

hBtn13 = CreateWindow("BUTTON", "Время работы Windows", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 505, 200, 30, hWnd, (HMENU)ID_BUTTON_13, hInstance, NULL);

hBtn14 = CreateWindow("BUTTON", "Пользователь", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 10, 545, 200, 30, hWnd, (HMENU)ID_BUTTON_14, hInstance, NULL);

// Сюда будем помещать информацию о конфигурации

hwndEdit = CreateWindow("EDIT","",WS_BORDER | WS_VISIBLE | WS_CHILD| ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_READONLY,250,25,550,550,hWnd,(HMENU)ID_EDIT,hInstance, NULL);

 

 

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

 

return TRUE;

}

 

// Функция определения конфигурации процессора

char *GetProc(char *cStr)

{

HKEY hKey;

char cType[255],cProc[255];

DWORD cLen=255;

DWORD ProcessorFrequency;

DWORD cData=sizeof(ProcessorFrequency);

char cTmp[200];

 

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"), 0, KEY_QUERY_VALUE, &hKey)==ERROR_SUCCESS)

{

RegQueryValueEx(hKey,"ProcessorNameString",NULL,NULL,(LPBYTE)cProc,&cLen);

RegQueryValueEx(hKey,"Identifier",NULL,NULL,(LPBYTE)cType,&cLen);

RegQueryValueEx(hKey,"~MHz",NULL,NULL,(LPBYTE)&ProcessorFrequency,&cData);

}

RegCloseKey(hKey);

// Формируем строку

cStr[0]='\0';

sprintf(cStr,"Название процессора: %s\r\nТип процессора: %s\r\nЧастота процессора: %ld МГц\r\n",cProc,cType,ProcessorFrequency);

if (IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE))

strcpy(cTmp,"Инструкции MMX поддерживаются\r\n");

else

strcpy(cTmp,"Инструкции MMX НЕ поддерживаются\r\n");

if (IsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE))

strcat(cTmp,"Инструкции SSE поддерживаются\r\n");

else

strcat(cTmp,"Инструкции SSE НЕ поддерживаются\r\n");

 strcat(cStr,cTmp);

 return(cStr);

}

 

// Функция определения конфигурации BIOS

char *GetBios(char *cStr)

{

HKEY hKey;

char cType[255],cBios[255];

DWORD cLen=255;

 

 

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DESCRIPTION\\System"), 0, KEY_QUERY_VALUE, &hKey)==ERROR_SUCCESS)

{

RegQueryValueEx(hKey,"SystemBiosVersion",NULL,NULL,(LPBYTE)cBios,&cLen);

RegQueryValueEx(hKey,"SystemBiosDate",NULL,NULL,(LPBYTE)cType,&cLen);

}

RegCloseKey(hKey);

// Формируем строку

cStr[0]='\0';

sprintf(cStr,"Название BIOS: %s\r\nДата изготовления: %s\r\n",cBios,cType);

return(cStr);

}

 

// Функция определения конфигурации BIOS

char *GetMB(char *cStr)

{

HKEY hKey;

char cType[255],cMan[255];

DWORD cLen=255;

 

 

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DESCRIPTION\\System\\BIOS"), 0, KEY_QUERY_VALUE, &hKey)==ERROR_SUCCESS)

{

RegQueryValueEx(hKey,"BaseBoardManufacturer",NULL,NULL,(LPBYTE)cMan,&cLen);

RegQueryValueEx(hKey,"BaseBoardProduct",NULL,NULL,(LPBYTE)cType,&cLen);

// Формируем строку

cStr[0]='\0';

sprintf(cStr,"Марка системной платы: %s\r\nПроизводитель: %s\r\n",cType,cMan);

}

else

sprintf(cStr,"Название Материнской платы: %s\r\nПроизводитель: %s\r\n","Не определено","Не определен");

RegCloseKey(hKey);

 

return(cStr);

}

 

 

// Функция определения конфигурации видеокарты

char* GetVideo(char *cStr)

{

 HMODULE hUser32;

 DISPLAY_DEVICE DispDev;

 PFUNC EnumDisplayDevices;

 char cTmp[200];

 DEVMODE DevMode;

 

 

 cStr[0]='\0';

 hUser32 = LoadLibrary("user32.dll");

 if (hUser32 == NULL)

return(cStr);

 EnumDisplayDevices = (PFUNC)GetProcAddress(hUser32, "EnumDisplayDevicesA");

 // Получаем указатель на EnumDisplayDevices

 if (EnumDisplayDevices == NULL)

return(cStr);

 // Теперь можно использовать EnumDisplayDevices с помощью указателя func

 DispDev.cb = sizeof(DISPLAY_DEVICE);

 if (EnumDisplayDevices(NULL, 0, &DispDev, 0))

sprintf(cTmp,"Видеоадаптер:\r\nНазвание адаптера:%s\r\n",(char *)DispDev.DeviceString);

strcat(cStr,cTmp);

if (EnumDisplaySettings((char *)DispDev.DeviceName,ENUM_CURRENT_SETTINGS,&DevMode))

{

sprintf(cTmp,"Драйвер: %s\r\nРазрешение экрана:%d x %d\r\nБит на пиксель:%d\r\nЧастота обновления:%d Гц\r\n",DevMode.dmDeviceName,DevMode.dmPelsWidth,DevMode.dmPelsHeight,DevMode.dmBitsPerPel,DevMode.dmDisplayFrequency);

strcat(cStr,cTmp);

}

}

 return(cStr);                                     

}

 

// Функция определения конфигурации видеокарты

char* GetMonitor(char *cStr)

{

 HMODULE hUser32;

 DISPLAY_DEVICE DispDev;

 PFUNC EnumDisplayDevices;

 char cTmp[200];

 DEVMODE DevMode;

 

 

 cStr[0]='\0';

 hUser32 = LoadLibrary("user32.dll");

 if (hUser32 == NULL)

return(cStr);

 EnumDisplayDevices = (PFUNC)GetProcAddress(hUser32, "EnumDisplayDevicesA");

 // Получаем указатель на EnumDisplayDevices

 if (EnumDisplayDevices == NULL)

return(cStr);

 // Теперь можно использовать EnumDisplayDevices с помощью указателя func

 DispDev.cb = sizeof(DISPLAY_DEVICE);

 if (EnumDisplayDevices(NULL, 0, &DispDev, 0))

sprintf(cTmp,"Монитор:\r\n");

strcat(cStr,cTmp);

if (EnumDisplaySettings((char *)DispDev.DeviceName,ENUM_CURRENT_SETTINGS,&DevMode))

{

sprintf(cTmp,"Разрешение экрана:%d x %d\r\nБит на пиксель:%d\r\nЧастота обновления:%d Гц\r\n",DevMode.dmPelsWidth,DevMode.dmPelsHeight,DevMode.dmBitsPerPel,DevMode.dmDisplayFrequency);

strcat(cStr,cTmp);

}

strcpy(cTmp, (char *)DispDev.DeviceName);

EnumDisplayDevices(cTmp, 0, &DispDev, 0);   

sprintf(cTmp,"Название монитора:%s\r\n",(char *)DispDev.DeviceString);

strcat(cStr,cTmp);

}

 return(cStr);                                     

}

 

 

// Функция определения конфигурации дисковой подсистемы

char *GetDisk(char *cStr)

{

 DWORD Drive;

 char cTmp[200];

 int i;

 char cDisk[10],cVolume[50],cFileSysName[50];

 DWORD SerNum,VolSize,FileSys;

 ULARGE_INTEGER free,total,tot2;

 

 Drive=GetLogicalDrives();

 cStr[0]='\0';

 for(i=1;i<32;i++)

{

if (Drive&(1<<i))

{

sprintf(cTmp,"Диск:%c\r\nТип диска:",'A'+i);

strcat(cStr,cTmp);

cDisk[0]=(char)'A'+i;

cDisk[1]=':';cDisk[2]='\\';

cDisk[3]='\0';

switch (GetDriveType(cDisk))

{

     case DRIVE_UNKNOWN:strcpy(cTmp,"Неизвестный тип\r\n");break;

     case DRIVE_NO_ROOT_DIR:strcpy(cTmp,"Неверный путь\r\n");break;

     case DRIVE_REMOVABLE:strcpy(cTmp,"Съемный диск\r\n");break;

     case DRIVE_FIXED:strcpy(cTmp,"Жесткий диск\r\n");break;

     case DRIVE_REMOTE:strcpy(cTmp,"Сетевой диск\r\n");break;

     case DRIVE_CDROM:strcpy(cTmp,"CD-ROM\r\n");break;

     case DRIVE_RAMDISK:strcpy(cTmp,"Виртуальный диск\r\n");break;

}

strcat(cStr,cTmp);

cVolume[0]='\0';

cFileSysName[0]='\0';

SerNum=0;VolSize=0;FileSys=0;

GetVolumeInformation(cDisk,cVolume,sizeof(cVolume),&SerNum,&VolSize,&FileSys,cFileSysName,sizeof(cFileSysName));

sprintf(cTmp,"Имя тома:%s\r\nФайловая система:%s\r\n",cVolume,cFileSysName);

strcat(cStr,cTmp);

free.QuadPart=0;total.QuadPart=0;tot2.QuadPart=0;

GetDiskFreeSpaceEx(cDisk,&free,&total,&tot2);

sprintf(cTmp,"Общий объем:%lu Мб\r\nСвободно:%lu Мб\r\nЗанято:%ld Мб\r\n\r\n",(long)(total.QuadPart/(1024*1024)),(long)(free.QuadPart/(1024*1024)),(long)(total.QuadPart/(1024*1024))-(free.QuadPart/(1024*1024)));

strcat(cStr,cTmp);

}

}

return(cStr);

}

 

 

BOOL GetDriveGeometry(DISK_GEOMETRY *pdg, const char* driveName)

{

HANDLE hDevice;

BOOL bResult;

DWORD junk;

 

// формируем строку для получения хэндла диска. Необходимый формат "\\.\C:"

char str[7];

str[0] = str[1] = str[3] = '\\';

str[2] = '.';

str[4] = driveName[0];

str[5] = driveName[1];

str[6] = '\0';

 

// получаем хэндл диска

hDevice = CreateFileA(str, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,

OPEN_EXISTING, 0, NULL);

 

if (hDevice == INVALID_HANDLE_VALUE)

return FALSE;

 

// Получаем данные о диске

bResult = DeviceIoControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0,

pdg, sizeof(*pdg), &junk, (LPOVERLAPPED) NULL);

CloseHandle(hDevice);

return bResult;

}

 

 

// Функция определения конфигурации дисковой подсистемы

char *GetFizDisk(char *cStr)

{

 

 DWORD Drive;

 char cTmp[200];

 int i,j;

 char cDisk[10],cVolume[50],cFileSysName[50];

 DWORD SerNum,VolSize,FileSys;

 int n=0,f;

 DISK_GEOMETRY SN[10];

 DISK_GEOMETRY pdg;

 BOOL bResult;

 

 Drive=GetLogicalDrives();

 cStr[0]='\0';

 for(i=1;i<32;i++)

{

if (Drive&(1<<i))

{

cDisk[0]=(char)'A'+i;

cDisk[1]=':';cDisk[2]='\\';

cDisk[3]='\0';

switch (GetDriveType(cDisk))

{

     case DRIVE_UNKNOWN:break;

     case DRIVE_NO_ROOT_DIR:break;

     case DRIVE_REMOVABLE:break;

     case DRIVE_REMOTE:break;

     case DRIVE_CDROM:break;

     case DRIVE_RAMDISK:break;

     case DRIVE_FIXED:cVolume[0]='\0';cFileSysName[0]='\0';SerNum=0;VolSize=0;FileSys=0;

                GetVolumeInformation(cDisk,cVolume,sizeof(cVolume),&SerNum,&VolSize,&FileSys,cFileSysName,sizeof(cFileSysName));

                              // Проверяем, есть ли в списке этот диск

                              bResult = GetDriveGeometry (&pdg, cDisk);

                              f=0;

                              for(j=0;j<n;j++)

                             if (SN[j].BytesPerSector==pdg.BytesPerSector&&SN[j].Cylinders.QuadPart==pdg.Cylinders.QuadPart&&SN[j].MediaType==pdg.MediaType&&SN[j].SectorsPerTrack==pdg.SectorsPerTrack&&SN[j].TracksPerCylinder==pdg.TracksPerCylinder)

                             f=1;

                    if (f==0) // Если не было еще диска

                             {

                             SN[n]=pdg;

                             n++;

                             sprintf(cTmp,"Жесткий диск №%1d.\r\n Цилиндров = %I64d Дорожек на цилиндр:%ld\r\nСекторов на дорожку: %ld Байт на сектор:%ld\r\n Общий размер: %I64d Байт \r\n",n-1,pdg.Cylinders,pdg.TracksPerCylinder,pdg.SectorsPerTrack,pdg.BytesPerSector,pdg.Cylinders.QuadPart*((ULONG)pdg.TracksPerCylinder)*((ULONG)pdg.SectorsPerTrack)*((ULONG)pdg.BytesPerSector));

                             strcat(cStr,cTmp);

 

                             }

                 break;

}

}

}

 

 return(cStr);

 

}

 

// Функция запрашиваем информацию об клавиатуре

char *GetInpKl(char *cStr)

{

 char cTmp[200];

 

 

 cStr[0]='\0';

 strcpy(cStr,"Тип клавиатуры:\r\n");

 switch(GetKeyboardType(0))

{

case 1:strcpy(cTmp,"IBM PC/XT или совместимая (83 клавиши) клавиатура\r\n");break;

case 2:strcpy(cTmp,"Olivetti \"ICO\" (102 клавиши) клавиатура\r\n");break;

case 3:strcpy(cTmp,"IBM PC/AT (84 клавиши) или сходная с ней клавиатура\r\n");break;

case 4:strcpy(cTmp,"IBM enhanced (101 или 102 клавиши) клавиатура\r\n");break;

case 5:strcpy(cTmp,"Nokia 1050 и сходная с ней клавиатура\r\n");break;

case 6:strcpy(cTmp,"Nokia 9140 и сходная с ней клавиатура\r\n");break;

case 7:strcpy(cTmp,"Японская клавиатура\r\n");break;

default:strcpy(cTmp,"Не удалось определить\r\n");break;

}

 strcat(cStr,cTmp);

 return(cStr);

}

 

// Функция запрашиваем информацию об мыши

char *GetInpMouse(char *cStr)

{

 char cTmp[200];

 

 cStr[0]='\0';

 switch (GetSystemMetrics(SM_CMOUSEBUTTONS))

{

case 0: strcpy(cTmp,"Нет мыши в системе\r\n");break;

default:sprintf(cTmp,"Мышь с %d кнопками",GetSystemMetrics(SM_CMOUSEBUTTONS));break;

}

 strcat(cStr,cTmp);

 return(cStr);

}

 

 

// Функция получает сетевую информацию

char *GetNetAdapter(char *cStr)

{

PIP_ADAPTER_INFO pAdapterInfo = NULL;

PIP_ADAPTER_INFO pAdapter = NULL;

DWORD dwRetVal = 0;

ULONG ulOutBufLen;

char cTmp[200];

 

cStr[0]='\0';

ulOutBufLen = sizeof (IP_ADAPTER_INFO);

pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));

if (pAdapterInfo == NULL)

return(cStr);

if( (dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR )

{

   pAdapter = pAdapterInfo;

   while( pAdapter )

     {

       

       sprintf(cTmp,"Системное имя: %s\r\n", pAdapter->AdapterName);

           strcat(cStr,cTmp);

       sprintf(cTmp,"Сетевой адаптер: %s\r\n", pAdapter->Description);

           strcat(cStr,cTmp);

            switch (pAdapter->Type) {

       case MIB_IF_TYPE_OTHER:

           sprintf(cTmp,"Тип адаптера:Other\r\n");

           break;

       case MIB_IF_TYPE_ETHERNET:

           sprintf(cTmp,"Тип адаптера:Ethernet\r\n");

           break;

       case MIB_IF_TYPE_TOKENRING:

           sprintf(cTmp,"Тип адаптера:Token Ring\r\n");

           break;

       case MIB_IF_TYPE_FDDI:

           sprintf(cTmp,"Тип адаптера:FDDI\r\n");

           break;

       case MIB_IF_TYPE_PPP:

           sprintf(cTmp,"Тип адаптера:PPP\r\n");

           break;

       case MIB_IF_TYPE_LOOPBACK:

           sprintf(cTmp,"Тип адаптера:Lookback\r\n");

           break;

       case MIB_IF_TYPE_SLIP:

           sprintf(cTmp,"Тип адаптера:Slip\r\n");

           break;

       default:

           sprintf(cTmp,"Тип адаптера: Unknown type %ld\r\n", pAdapter->Type);

           break;

       }

           strcat(cStr,cTmp);

           sprintf(cTmp,"IP адрес: %s\r\n",pAdapter->IpAddressList.IpAddress.String);

           strcat(cStr,cTmp);

           sprintf(cTmp,"IP маска: %s\r\n", pAdapter->IpAddressList.IpMask.String);

           strcat(cStr,cTmp);

       sprintf(cTmp,"Шлюз: %s\r\n", pAdapter->GatewayList.IpAddress.String);

           strcat(cStr,cTmp);

       pAdapter = pAdapter->Next;

     }

}

FREE(pAdapterInfo);

 return(cStr);

}

 

// Функция получает информацию о запущенных приложениях

char *GetApplication(char *cStr)

{

PROCESSENTRY32 PE32;

char cTmp[200];

 

cStr[0]='\0';

sprintf(cStr,"Запущенные процессы:\r\n");

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if(hSnapshot == INVALID_HANDLE_VALUE)

{

sprintf(cStr,"CreateToolhelp32Snapshot() не удалось выполнить.");

return(cStr);

}

if(!Process32First(hSnapshot, &PE32))

{

CloseHandle(hSnapshot);

sprintf(cStr,"Process32First() не удалось выполнить.");

return(cStr);

}

do

{

sprintf(cTmp,"%s\r\n", PE32.szExeFile);

strcat(cStr,cTmp);

}

while(Process32Next(hSnapshot, &PE32));

  

CloseHandle(hSnapshot);

return(cStr);

}

 

 

// Формируем строку с временем, когда было создано сообщение

void GetTimestamp(const DWORD Time, char *DisplayString)

{

ULONGLONG ullTimeStamp = 0;

ULONGLONG SecsTo1970 = 116444736000000000;

SYSTEMTIME st;

FILETIME ft, ftLocal;

 

ullTimeStamp = Int32x32To64(Time, 10000000) + SecsTo1970;

ft.dwHighDateTime = (DWORD)((ullTimeStamp >> 32) & 0xFFFFFFFF);

ft.dwLowDateTime = (DWORD)(ullTimeStamp & 0xFFFFFFFF);

   

FileTimeToLocalFileTime(&ft, &ftLocal);

FileTimeToSystemTime(&ftLocal, &st);

sprintf(DisplayString,"\t %d/%d/%d %.2d:%.2d:%.2d\t", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond);

}

 

 

// Функция определяем тип операционной системы

char *WorkTime(char *cStr)

{

 OSVERSIONINFO osvi;

 char cTmp[200];

 HANDLE hEventSource;

 DWORD dwBytesToRead = 0;

 DWORD dwBytesRead = 0;

 DWORD dwMinimumBytesToRead = 0;

 char TimeStamp[MAX_TIMESTAMP_LEN];

 

 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

 GetVersionEx(&osvi);

 sprintf(cStr,"Версия операционной системы:%ld.%ld \r\nНомер сборки:%ld \r\n%s\r\n",osvi.dwMajorVersion,osvi.dwMinorVersion,osvi.dwBuildNumber,osvi.szCSDVersion);

 

 // Открываем журнал System

 hEventSource = RegisterEventSource(NULL,"System");

 if(hEventSource!=NULL)

// Считыавем сообщения

dwBytesToRead = MAX_RECORD_BUFFER_SIZE;

while (ReadEventLog(hEventSource,EVENTLOG_SEQUENTIAL_READ | EVENTLOG_BACKWARDS_READ,0,cBuffer,dwBytesToRead,&dwBytesRead,&dwMinimumBytesToRead))

{

PBYTE pRecord = (PBYTE)cBuffer;

     PBYTE pEndOfRecords = (PBYTE)cBuffer + dwBytesRead;

 

   // Пока не закончились записи в буфере

   while (pRecord < pEndOfRecords)

     {

 

       if ((((PEVENTLOGRECORD)pRecord)->EventID & 0xFFFF)==6005) // Запуск Windows

            {

           // Выделяем из записи время

          GetTimestamp(((PEVENTLOGRECORD)pRecord)->TimeGenerated, TimeStamp);

           sprintf(cTmp,"Запуск windows: %s\r\n",TimeStamp);

           strcat(cStr,cTmp);

        }

           if ((((PEVENTLOGRECORD)pRecord)->EventID & 0xFFFF)==6006) // Завершение Windows

            {

           // Выделяем из записи время

          GetTimestamp(((PEVENTLOGRECORD)pRecord)->TimeGenerated, TimeStamp);

           sprintf(cTmp,"Завершение windows: %s\r\n",TimeStamp);

           strcat(cStr,cTmp);

        }

       // Переходим на следующую запись

        pRecord += ((PEVENTLOGRECORD)pRecord)->Length;

      }

}

DeregisterEventSource(hEventSource);

}

 return(cStr);

}

 

 

// Функция определяет системную информацию

char *GetUser(char *cStr)

{

 DWORD size;

 char cComp[50],cUser[50];

 

 size=sizeof(cComp);

 GetComputerName(cComp,&size);

 size=sizeof(cUser);

 GetUserName(cUser,&size);

 sprintf(cStr,"Имя компьютера:%s\r\nИмя пользователя:%s\r\n",cComp,cUser);

 return(cStr);

}

 

char *SaveToFile(char *cStr,HWND hWnd)

{

char szFileName[MAX_PATH] = "";

OPENFILENAME ofn;

FILE *f;

 

cStr[0]='\0';

// В диалоге просим назначить имя файла

ZeroMemory(&ofn, sizeof(OPENFILENAME));

ofn.lStructSize = sizeof(OPENFILENAME);

ofn.hwndOwner = hWnd;

ofn.lpstrFilter =

  "Text files (*.txt)\0*.txt\0"

  "All files (*.*)\0*.*\0";

ofn.lpstrFile = szFileName;

ofn.nMaxFile = MAX_PATH;

ofn.lpstrTitle = "Имя файла для сохранения конфигурации";

ofn.Flags = OFN_CREATEPROMPT|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY;

ofn.lpstrDefExt = "txt";

if(GetOpenFileName(&ofn))

 {

  // Открываем файл

if ((f=fopen(szFileName,"w"))==NULL)

{

return(cStr);

}

// Построчно сохраняем конфигурацию

  fprintf(f,"%s",GetProc(cStr));

fprintf(f,"%s",GetBios(cStr));

fprintf(f,"%s",GetDisk(cStr));

fprintf(f,"%s",GetFizDisk(cStr));

fprintf(f,"%s",GetInpKl(cStr));

fprintf(f,"%s",GetMB(cStr));

fprintf(f,"%s",GetInpMouse(cStr));

fprintf(f,"%s",GetVideo(cStr));

fprintf(f,"%s",GetMonitor(cStr));

fprintf(f,"%s",GetNetAdapter(cStr));

fprintf(f,"%s",GetApplication(cStr));

fprintf(f,"%s",WorkTime(cStr));

fprintf(f,"%s",GetUser(cStr));

// Закрываем файл

  sprintf(cStr,"Данные в файл сохранены");

fclose(f);

 }

return(cStr);

}

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

char cStr[10000];

 

switch (message)

{

     case WM_COMMAND:

           wmId = LOWORD(wParam);

           wmEvent = HIWORD(wParam);

           // Parse the menu selections:

           switch (wmId)

           {

           // Определение конфигурации процессора

           case ID_BUTTON_1:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetProc(cStr));

                                 break;

           // Определение конфигурации BIOS

           case ID_BUTTON_2:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetBios(cStr));

                             break;

                 // Определение конфигурации разделов hdd

           case ID_BUTTON_3:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetDisk(cStr));

                             break;

                 // Определение конфигурации дисковой подсистемы

           case ID_BUTTON_4:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetFizDisk(cStr));

                             break;

                 // Запрашиваем информацию об клавиатуре

           case ID_BUTTON_5:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetInpKl(cStr));

                             break;

                 // Получение информации о материнской плате

           case ID_BUTTON_6:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetMB(cStr));

                             break;

                 // Определяем тип операционной системы

           case ID_BUTTON_7:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetInpMouse(cStr));

                              break;

                 // Системная информация

           case ID_BUTTON_8:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetVideo(cStr));

                              break;

           case ID_BUTTON_9:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetMonitor(cStr));

                              break;

           case ID_BUTTON_10:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetNetAdapter(cStr));

                              break;

           case ID_BUTTON_11:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetApplication(cStr));

                              break;

                 case ID_BUTTON_12:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) SaveToFile(cStr,hWnd));

                              break;

                 case ID_BUTTON_13:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) WorkTime(cStr));

                              break;

                 case ID_BUTTON_14:SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM) GetUser(cStr));

                              break;

                 case IDM_ABOUT:

                 DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);

                 break;

                 case IDM_EXIT:

                 DestroyWindow(hWnd);

                 break;

                 default:

                 return DefWindowProc(hWnd, message, wParam, lParam);

           }

           break;

     case WM_DESTROY:

           PostQuitMessage(0);

           break;

     default:

     return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

 

// Функция обработки сообщения диалогового окна о программе...

LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

     case WM_INITDIALOG:

                 return TRUE;

 

     case WM_COMMAND:

           if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

           {

                 EndDialog(hDlg, LOWORD(wParam));

                 return TRUE;

           }

           break;

}

return FALSE;

}


Дата добавления: 2019-01-14; просмотров: 203; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!