Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / Лабораторная работа 1

.docx
Скачиваний:
69
Добавлен:
15.02.2021
Размер:
86.64 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Московский технический университет связи и информатики»

Центр заочного обучения по программам бакалавриата

Кафедра «Математической кибернетики и информационных технологий»

Лабораторная работа № 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