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) \0*. txt\0\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] = '\0';
// будет информация о системе.
DWORDcchBuff= 256; // длина имени компьютера или
// пользователя.
DWORDdwResult; // возвращаемое значение функции.
// Получаем и отображаем имя компьютера.
LPTSTR temp = new TCHAR [256];
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;
}
// Получаем и отображаем имя пользователя.
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;
}
// Получаем и отображаем системную директорию.
if (GetSystemDirectory (temp, MAX_PATH+1))
{
strcat (lpszSystemInfo, "Системная директория: \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: \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: \t\t\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: \t\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] = '\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);
}
void CPUInfo ()
{
SYSTEM_INFO siSysInfo;
GetSystemInfo (&siSysInfo);
LPTSTR lpszSystemInfo = new char [4000]; // указатель на строку, в которой
for (int a=0; a<BUFSIZE; a++)
lpszSystemInfo [a] = '\0'; // будет информация о системе.
char*tmp= newchar [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);
}
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);