Лабораторные работы / Лабораторная работа 1
.docxФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Московский технический университет связи и информатики»
Центр заочного обучения по программам бакалавриата
Кафедра «Математической кибернетики и информационных технологий»
Лабораторная работа № 1.
«Функции получения системной информации»
Выполнил: Иванов Иван, студент группы БСТ17хх
Цель работы:
Поучение практических навыков по программированию в Win32 API.
Задание:
Разработать программное обеспечение, обеспечивающее получение следующей информации:
Имя компьютера, имя пользователя;
Пути к системным каталогам Windows;
Версия операционной системы;
Системные метрики (не менее 2 метрик);
Системные параметры (не менее 2 параметров);
Системные цвета (определить цвет для следующих символьных констант и изменить его на любой другой);
Функции для работы со временем;
Дополнительные API-функции:
EnumSystemCodePages, GetInputState, GetLastError, SetKeyboardState
Результат работы программы:
Листинг кода программы
#include <windows.h>
#include <iostream>
#include <Lmcons.h>
#include <VersionHelpers.h>
const char* GetOsVersionName()
{
if (IsWindows10OrGreater())
{
return "10.0";
}
if (IsWindows8Point1OrGreater())
{
return "8.1";
}
if (IsWindows8OrGreater())
{
return "8";
}
if (IsWindows7OrGreater())
{
return "7";
}
if (IsWindowsVistaOrGreater())
{
return "Vista";
}
if (IsWindowsXPOrGreater())
{
return "XP";
}
return "Unknown";
}
BOOL CALLBACK EnumCodePagesProc(LPTSTR lpCodePageString)
{
std::wcout << lpCodePageString << "\n";
return TRUE;
}
int main()
{
// Пункт 1, получение имени компьютера и пользователя
char compname[MAX_COMPUTERNAME_LENGTH + 1];
char username[UNLEN + 1];
DWORD compsize = sizeof(compname);
DWORD usernamesize = sizeof(username);
GetComputerNameA(compname, &compsize);
GetUserNameA(username, &usernamesize);
// Пункт 2, получение системных директорий
char systemdirectory[256];
char windowsdirectory[256];
char tempdirectory[256];
UINT systemdirectory_size = 256;
UINT windowsdirectory_size = 256;
DWORD tempdirectory_size = 256;
GetSystemDirectoryA(systemdirectory, systemdirectory_size);
GetWindowsDirectoryA(windowsdirectory, windowsdirectory_size);
GetTempPathA(tempdirectory_size, tempdirectory);
// Пункт 3, получение версии ОС
const char* osVersion = GetOsVersionName();
// Пункт 4, получение системных метрик
int monitor_numbers = GetSystemMetrics(SM_CMONITORS);
int monitor_width = GetSystemMetrics(SM_CXSCREEN);
int monitor_height = GetSystemMetrics(SM_CYSCREEN);
// Пункт 5, получение системных параметров
BOOL fontsmoothing;
BOOL beep;
SystemParametersInfoA(SPI_GETFONTSMOOTHING, 0, &fontsmoothing, 0);
SystemParametersInfoA(SPI_GETBEEP, 0, &beep, 0);
// Пункт 6, определение и изменение цветов
DWORD border_color;
DWORD border_color_new;
const int lpaElements[1] = { COLOR_MENU };
DWORD original_color[1] = { RGB(240,240,240) };
DWORD new_color[1] = { RGB(51, 102, 255) };
SetSysColors(1, lpaElements, original_color);
border_color = GetSysColor(lpaElements[0]);
SetSysColors(1, lpaElements, new_color);
border_color_new = GetSysColor(lpaElements[0]);
SetSysColors(1, lpaElements, original_color);
// Пункт 7, функции для работы со временем
SYSTEMTIME systemtime;
SYSTEMTIME localtime;
GetSystemTime(&systemtime);
GetLocalTime(&localtime);
// Пункт 8, дополнительные API функции
// EnumSystemCodePages, GetInputState, GetLastError, SetKeyboardState
BOOL inputstate;
inputstate = GetInputState();
DWORD lasterror;
lasterror = GetLastError();
BYTE keystate[256];
GetKeyboardState(keystate);
keystate['A'] = 1;
SetKeyboardState(keystate);
// Вывод результатов
std::cout << "Computer name: " << compname << "\n";
std::cout << "Username: " << username << "\n";
std::cout << "System directory: " << systemdirectory << "\n";
std::cout << "Windows directory: " << windowsdirectory << "\n";
std::cout << "Temp directory: " << tempdirectory << "\n";
std::cout << "OS Version is Windows " << osVersion << "\n";
std::cout << "Monitor numbers: " << monitor_numbers << "\n";
std::cout << "Monitor resolution: " << monitor_width << "x" << monitor_height << "\n";
std::cout << "Font smoothing is: " << fontsmoothing << "\n";
std::cout << "Warning beep status is: " << beep << "\n";
std::cout << "Menu color in RGB is: " << "R: " << (int)GetRValue(border_color) << " G: " << (int)GetGValue(border_color) << " B: " << (int)GetBValue(border_color) << "\n";
std::cout << "Changed menu color in RGB is: " << "R: " << (int)GetRValue(border_color_new) << " G: " << (int)GetGValue(border_color_new) << " B: " << (int)GetBValue(border_color_new) << "\n";
std::cout << "System time is: " << systemtime.wHour << ":" << systemtime.wMinute << "\n";
std::cout << "Local time is: " << localtime.wHour << ":" << systemtime.wMinute << "\n";
std::cout << "Input state is: " << inputstate << "\n";
std::cout << "Last error code is: " << lasterror << "\n";
system("pause");
std::cout << "Installed code pages in system" << "\n";
EnumSystemCodePages(EnumCodePagesProc, CP_INSTALLED);
}
Москва 2020