ЛР-1 ОС
.docx
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Ордена Трудового Красного Знамени
федеральное государственное бюджетное образовательное учреждение
высшего образования
Московский технический университет связи и информатики
----------------------------------------------------------------------------------------------
Кафедра Математической кибернетики и информационных технологий
ЛАБОРАТОРНАЯ РАБОТА № 1
по дисциплине
ОПЕРАЦИОННЫЕ СИСТЕМЫ
«Функции получения системной информации»
Выполнил:
Студент группы БСТ 1801
Францев Артём
Москва 2020
Название работы: Функции получения системной информации.
Цель работы: получение практических навыков по программированию в Win32 API
с использованием аппаратных и системных функций.
Задание: Разработать программное обеспечение приложения, обеспечивающего получение следующей системной информации:
Имя компьютера, имя пользователя;
Пути к системным каталогам Windows;
Версия операционной системы;
Системные метрики (не менее 2 метрик);
Системные параметры (не менее 2 параметров);
Системные цвета (определить цвет для некоторых символьных констант и изменить его на любой другой);
Функции для работы со временем;
Дополнительные API-функции: GetACP, GetKeyboardLayout, GetSystemPowerStatus, SetComputerName.
Код программы представлен ниже:
#include "pch.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <locale>
#include <VersionHelpers.h>
#include <winbase.h>
#define cout wcout
using namespace std;
void getSysOpType()
{
NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW);
OSVERSIONINFOEXW osInfo;
*(FARPROC*)&RtlGetVersion = GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
if (NULL != RtlGetVersion)
{
osInfo.dwOSVersionInfoSize = sizeof(osInfo);
RtlGetVersion(&osInfo);
cout << "номер основной версии операционной системы:" << osInfo.dwMajorVersion << endl
<< "номер дополнительной версии операционной системы: " << osInfo.dwMinorVersion << endl
<< "номер сборки операционной системы: " << osInfo.dwBuildNumber << endl;
}
}
int getPower() {
cout << "Функция GetSystemPowerStatus: ";
int a;
SYSTEM_POWER_STATUS status;
GetSystemPowerStatus(&status);
a = status.BatteryFlag;
if (a == 1) {
cout << "Устройство имеет заряд больше 66%";
}
if (a == 2) {
cout << "Устройство имеет заряд меньше 33%";
}
if (a == 4) {
cout << "Устройство имеет заряд ниже 5%";
}
if (a == 9) {
cout << "Устройство заряжется и имеет заряд больше 66%";
}
return EXIT_SUCCESS;
}
int main()
{
int vvod = -1;
setlocale(LC_ALL, "rus");
cout.imbue(locale("rus_rus.1251"));
while (vvod != 9) {
system("cls");
cout << "Здравствуйте, выберите нужный раздел, введя ее номер: " << endl
<< "1. Имя компьютера и пользователя" << endl
<< "2. Пути к системным каталогам Windows" << endl
<< "3. Версия операционной системы" << endl
<< "4. Системные метрики" << endl
<< "5. Системные параметры" << endl
<< "6. Системные цвета" << endl
<< "7. Функции для работы со временем" << endl
<< "8. Дополнительные API-функции" << endl
<< "9. Выход" << endl;
cin >> vvod;
switch (vvod)
{
case 1:
{
char buffer1[256];
DWORD size = sizeof(buffer1);
GetUserName((LPWSTR)&buffer1, &size);
cout << "Имя пользователя: " << (LPWSTR)&buffer1 << endl;
char buffer2[256];
DWORD size2 = sizeof(buffer2);
if (GetComputerName((LPWSTR)&buffer2, &size2))
cout << "Имя компьютера: " << (LPWSTR)&buffer2 << endl;
system("PAUSE");
break;
}
case 2:
{
WCHAR s[4096];
GetTempPath(4096, s);
cout << "Путь к временной папке: " << s << endl;
GetSystemDirectory(s, 4096);
cout << "Путь к системной папке: " << s << endl;
GetWindowsDirectory(s, 4096);
cout << "Пути к папке windows: " << s << endl;
system("PAUSE");
break;
}
case 3:
{
getSysOpType();
system("PAUSE");
break;
}
case 4:
{
cout << "Системные метрики:" << endl
<< "\tРазрешение экрана: " << GetSystemMetrics(0)
<< "x" << GetSystemMetrics(1) << endl
<< "\tЕсть ли колесо прокрутки у мышки? ";
GetSystemMetrics(75) ? cout << "Да" << endl : cout << "Нет" << endl;
cout << "\tКоличество клавиш у мышки: " << GetSystemMetrics(43) << endl
<< "\tМеняются ли клавиши мыши местами? ";
GetSystemMetrics(23) ? cout << "Да" << endl : cout << "Нет" << endl;
system("PAUSE");
break;
}
case 5:
{
BOOL parametr;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ¶metr, 0);
cout << "Системные параметры:\n\tПараметр SPI_SETDESKWALLPAPER: "; parametr ? cout << "Есть\n" : cout << "Нет\n";
SystemParametersInfo(SPI_SETCURSORSHADOW, 0, ¶metr, 0);
cout << "\tПараметр SPI_SETCURSORSHADOW: "; parametr ? cout << "Есть\n" : cout << "Нет\n";
SystemParametersInfo(SPI_GETBEEP, 0, ¶metr, 0);
cout << "\tПризнак разрешения звуковых сигналов: "; parametr ? cout << "Есть\n" : cout << "Нет\n";
system("PAUSE");
break;
}
case 6:
{
int n[] = { COLOR_WINDOW, COLOR_WINDOWTEXT};
COLORREF color = GetSysColor(n[0]);
COLORREF color2 = GetSysColor(n[1]);
unsigned long p[] = { color, color2 };
COLORREF newcolor[] = { RGB(150, 75, 0), RGB(0, 255, 255) };
cout << "Коричневый начальный цвет: " << GetSysColor(n[0]) << endl;
SetSysColors(2, n, newcolor);
cout << "Cиний конечный цвет: " << GetSysColor(n[0]) << endl;
cout << "Изменён цвет тени для элементов.\n";
system("PAUSE");
SetSysColors(2, n, p);
break;
}
case 7:
{
SYSTEMTIME time1, time2;
GetLocalTime(&time1);
GetSystemTime(&time2);
cout << "Информаци о времени:\nЛокальное время: дата " << time1.wDay << "." << time1.wMonth << L"." << time1.wYear << " время " << time1.wHour << ":" << time1.wMinute
<< "\nСистемное время: " << "дата " << time2.wDay << "." << time2.wMonth << "." << time2.wYear << " время " << time2.wHour << ":" << time2.wMinute << endl;
system("PAUSE");
break;
}
case 8:
{
cout << "Индивидуальное задание:\n";
getPower();
cout << endl << "Функция SetComputerName:" << endl;
char buffer2[256];
DWORD size2 = sizeof(buffer2);
if (GetComputerName((LPWSTR)&buffer2, &size2))
cout << "\tИмя компьютера: " << (LPWSTR)&buffer2 << endl;
cout << "\tНовое компьютера: EVGENY-POCC" << endl;
char newname[256] = "EVGENY-POCC";
SetComputerName((LPCWSTR)&newname);
cout << "Функция GetACP: "
<< GetACP() << endl;
cout << "Функция GetKeyboardLayout: ";
cout << GetKeyboardLayout(0) << endl;
cout << "\tUS раскладка - 04 190 409" << endl
<< "\tRU раскладка - 04 190 419" << endl;
system("PAUSE");
break;
}
case 9:
break;
default:
cout << "Укажите правильный раздел.";
}
}
return 0;
}
Далее представлены результат работы программы по каждому из разделов.
Рисунок 1 - "Титул программы"
Рисунок 2 – вывод имени пользователя и компьютера
Рисунок 3- вывод путей к системным каталогам
Рисунок 4 - вывод информации об версии ОС
Рисунок 5 - вывод некоторых системных метрик
Рисунок 6 - вывод системных параметров
Рисунок 7 - вывод результата работы с системными цветами
Рисунок 8 - вывод результатов работы функции со временем
Рисунок 9 - вывод результат работы дополнительных API-функций\
Рисунок 10 - выход из программы