Смекни!
smekni.com

Информационная система сравнительного анализа работы компьютера (стр. 3 из 4)

HWND hWnd;

const int n_Count = 7;

Info Info_list [n_Count];

void Create_List ();

void Save ();

// Предварительное описание функций

ATOM MyRegisterClass (HINSTANCE hInstance);

BOOL InitInstance (HINSTANCE, int);

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

// Основная программа

int APIENTRY WinMain (HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

MSG msg;

// Регистрация класса окна

MyRegisterClass (hInstance);

// Создание окна приложения

if (! InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

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

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

{

TranslateMessage (&msg);

DispatchMessage (&msg);

}

return msg. wParam;

}

// FUNCTION: MyRegisterClass ()

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

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, MAKEINTRESOURCE (IDI_ICON1)); // опре-деление иконки

wcex. hCursor= LoadCursor (NULL, IDC_ARROW); // опреде-ление курсора

wcex. hbrBackground= GetSysColorBrush (COLOR_BTNFACE); // ус-тановка фона

wcex. lpszMenuName= (LPSTR) IDR_MENU1; // определение меню

wcex. lpszClassName= szWindowClass; // имя класса

wcex. hIconSm= NULL;

return RegisterClassEx (&wcex); // регистрация класса окна

}

// FUNCTION: InitInstance (HANDLE, int)

// Создает окно приложения и сохраняет указатель приложения в переменной hInst

BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)

{

hInst= hInstance; // сохраняет указатель приложения в переменной hInst

hWnd=CreateWindow (szWindowClass, // имя класса окна

szTitle, // имя приложения

WS_OVERLAPPEDWINDOW, // стиль окна

CW_USEDEFAULT, // положение по Х

CW_USEDEFAULT, // положение по Y

CW_USEDEFAULT, // размер по Х

CW_USEDEFAULT, // размер по Y

NULL, // описатель родительского окна

NULL, // описатель меню окна

hInstance, // указатель приложения

NULL); // параметры создания.

if (! hWnd) // Если окно не создалось, функция возвращает FALSE

{

return FALSE;

}

StaticText = CreateWindow ("edit", "", WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY, 0,0,0,0, hWnd, (HMENU) 4001, hInst, NULL);

Listbox = CreateWindow ("listbox", "", LBS_NOTIFY|WS_VSCROLL|WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|LBS_DISABLENOSCROLL, 0,0,0,0, hWnd, (HMENU) 4002, hInst, NULL);

Create_List ();

ShowWindow (hWnd, nCmdShow); // Показать окно

UpdateWindow (hWnd); // Обновить окно

return TRUE; // Успешное завершение функции

}

// FUNCTION: WndProc (HWND, unsigned, WORD, LONG)

// Оконная процедура. Принимает и обрабатывает все сообщения, прихо-дящие в приложение

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

{

PAINTSTRUCT ps;

HDC hdc;

RECT rt;

switch (message)

{

caseWM_CREATE: // Сообщение приходит при создании окна

break;

case WM_SIZE:

{

GetClientRect (hWnd, &rt);

int w = (rt. right-rt. left) /4;

MoveWindow (Listbox, rt. left, rt. top, w, rt. bottom-rt. top, TRUE);

MoveWindow (StaticText, rt. left+w, rt. top, w*3, rt. bottom-rt. top, TRUE);

}

break;

case WM_COMMAND:

{

switch (LOWORD (wParam))

{

case Id_List:

{

int Count = SendMessage (Listbox, LB_GETCURSEL, 0, 0);

if ( ( (Count>=0) && (Count<=n_Count)) && (HIWORD (wParam) ==LBN_SELCHANGE))

{

Info_list [Count]. function ();

}

}

break;

case ID_MENUITEM40001:

Save ();

break;

case ID_ABOUT:

MessageBox (hWnd,lpText,lpCaption,MB_OK);

break;

default:

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

break;

}

}

break;

case WM_PAINT: // Перерисовать окно

hdc= BeginPaint (hWnd, &ps); // Начать графический вывод

GetClientRect (hWnd, &rt); // Область окна для рисования

EndPaint (hWnd, &ps); // Закончить графический вывод

break;

case WM_DESTROY: // Завершение работы

PostQuitMessage (0);

break;

default:

// Обработка сообщений, которые не обработаны пользователем

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

}

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

}

void Create_List ()

{

Info_list [0]. CreateInfo ("Системная информация", 0, & (SysInf));

Info_list [1]. CreateInfo ("Оперативная память", 1, & (MemStat));

Info_list [2]. CreateInfo ("Информация о процессоре", 1, & (CPUInfo));

Info_list [3]. CreateInfo ("IP Адрес машины", 1, & (GetCurentIP));

Info_list [4]. CreateInfo ("Информация о принтерах", 1, & (PrinterInfo));

Info_list [5]. CreateInfo ("Текущий видеорежим", 1, & (DxInfo));

Info_list [6]. CreateInfo ("Информация о дисках", 1, & (DrivesInfo));

}

void Save ()

{

char *adress = new char [_MAX_PATH];

OPENFILENAMEof;

// Работа с диалоговым окном

strcpy (adress,"SysInfo");

of. lStructSize=sizeof (OPENFILENAME);

of. hwndOwner=hWnd;

of. hInstance=hInst;

of. lpstrFilter="txt Files (*. txt) &bsol;0*. txt&bsol;0&bsol;0";

of. lpstrCustomFilter=NULL;

of. nMaxCustFilter=0;

of. nFilterIndex=0;

of. lpstrFile=adress;

of. nMaxFile=_MAX_PATH;

of. lpstrFileTitle=NULL;

of. nMaxFileTitle=_MAX_FNAME + _MAX_EXT;

of. lpstrInitialDir=NULL;

of. lpstrTitle=NULL;

of. Flags=OFN_OVERWRITEPROMPT;

of. nFileOffset=0;

of. nFileExtension=0;

of. lpstrDefExt="info";

of. lCustData=0L;

of. lpfnHook=NULL;

of. lpTemplateName=NULL;

if (GetSaveFileName (&of) ==TRUE)

{

strcpy (adress, of. lpstrFile);

ofstream fout (adress);

char *text = new char [4000];

GetWindowText (StaticText, text, 4000);

fout<<text;

fout. close ();

delete [] text;

}

}

Index. cpp

#include "Index. h"

#include <windows. h>

#define DIV 1024

extern HWND Listbox;

extern HWND StaticText;

extern HWND hWnd;

Info:: Info ()

{

Index = 0;

value = new char [50];

}

void Info:: CreateInfo (char* value, int Index, void (*function) ())

{

this->value = value;

this->Index = Index;

this->function = function;

SendMessage (Listbox, LB_ADDSTRING, NULL, (LPARAM) value);

}

void SysInf ()

{

char * lpszSystemInfo = new char [BUFSIZE]; // указатель на строку, в которой

for (int a=0; a<BUFSIZE; a++)

lpszSystemInfo [a] = '&bsol;0';

// будет информация о системе.

DWORDcchBuff= 256; // длина имени компьютера или

// пользователя.

DWORDdwResult; // возвращаемое значение функции.

// Получаем и отображаем имя компьютера.

LPTSTR temp = new TCHAR [256];

if (GetComputerName (temp, &cchBuff))

{

strcat (lpszSystemInfo, "Имя компьютера: &bsol;t&bsol;t");

strcat (lpszSystemInfo, temp);

strcat (lpszSystemInfo, " ");

int n_long = strlen (lpszSystemInfo);

lpszSystemInfo [n_long-2] = 13;

lpszSystemInfo [n_long-1] = 10;

}

// Получаем и отображаем имя пользователя.

if (GetUserName (temp, &cchBuff))

{

strcat (lpszSystemInfo, "Имя пользователя: &bsol;t");

strcat (lpszSystemInfo, temp);

strcat (lpszSystemInfo, " ");

int n_long = strlen (lpszSystemInfo);

lpszSystemInfo [n_long-2] = 13;

lpszSystemInfo [n_long-1] = 10;

}

// Получаем и отображаем системную директорию.

if (GetSystemDirectory (temp, MAX_PATH+1))

{

strcat (lpszSystemInfo, "Системная директория: &bsol;t");

strcat (lpszSystemInfo, temp);

strcat (lpszSystemInfo, " ");

int n_long = strlen (lpszSystemInfo);

lpszSystemInfo [n_long-2] = 13;

lpszSystemInfo [n_long-1] = 10;

}

// Получаем и отображаем директорию Windows.

if (GetWindowsDirectory (temp, MAX_PATH+1))

{

strcat (lpszSystemInfo, "Директория Windows: &bsol;t");

strcat (lpszSystemInfo, temp);

strcat (lpszSystemInfo, " ");

int n_long = strlen (lpszSystemInfo);

lpszSystemInfo [n_long-2] = 13;

lpszSystemInfo [n_long-1] = 10;

}

// Получаем переменную окружения OS.

dwResult = ExpandEnvironmentStrings (

"Тип OS: &bsol;t&bsol;t&bsol;t%OS%",

temp,

BUFSIZE);

if (dwResult <= BUFSIZE)

{

strcat (lpszSystemInfo, temp);

strcat (lpszSystemInfo, " ");

int n_long = strlen (lpszSystemInfo);

lpszSystemInfo [n_long-2] = 13;

lpszSystemInfo [n_long-1] = 10;

}

dwResult = ExpandEnvironmentStrings (

"Папка TEMP: &bsol;t&bsol;t%TEMP%",

temp,

BUFSIZE);

if (dwResult <= BUFSIZE)

{

strcat (lpszSystemInfo, temp);

strcat (lpszSystemInfo, " ");

int n_long = strlen (lpszSystemInfo);

lpszSystemInfo [n_long-2] = 13;

lpszSystemInfo [n_long-1] = 10;

}

SendMessage (StaticText, WM_SETTEXT, 0, (LPARAM) lpszSystemInfo);

}

void MemStat ()

{

MEMORYSTATUS stat;

GlobalMemoryStatus (&stat);

LPTSTRlpszSystemInfo= newchar [BUFSIZE]; // указатель на строку, в которой

for (int a=0; a<BUFSIZE; a++)

lpszSystemInfo [a] = '&bsol;0'; // будет информация о системе.

char *tmp = new char [32];

strcat (lpszSystemInfo, "Размер структуры MemoryStatus &bsol;t&bsol;t&bsol;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, "Количество используемой ОЗУ,% &bsol;t&bsol;t&bsol;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 &bsol;t&bsol;t&bsol;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 &bsol;t&bsol;t&bsol;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 &bsol;t&bsol;t&bsol;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 &bsol;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);

}

void CPUInfo ()

{

SYSTEM_INFO siSysInfo;

GetSystemInfo (&siSysInfo);

LPTSTR lpszSystemInfo = new char [4000]; // указатель на строку, в которой

for (int a=0; a<BUFSIZE; a++)

lpszSystemInfo [a] = '&bsol;0'; // будет информация о системе.

char*tmp= newchar [32];

strcat (lpszSystemInfo, "Кличество процессоров (ядер) &bsol;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, "Тип процессора &bsol;t&bsol;t&bsol;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, "Архитектура процессора &bsol;t&bsol;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 процессора &bsol;t&bsol;t&bsol;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 процессора &bsol;t&bsol;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, "Активная маска процессора &bsol;t&bsol;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);

}

void GetCurentIP ()

{

LPTSTR lpszSystemInfo = new char [BUFSIZE]; // указатель на строку, в которой

for (int a=0; a<BUFSIZE; a++)

lpszSystemInfo [a] = '&bsol;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, "Имя локальной машины: &bsol;t&bsol;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);