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

lab1 / Lab1

.docx
Скачиваний:
14
Добавлен:
28.06.2021
Размер:
205.44 Кб
Скачать

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

Федеральное государственное образовательное бюджетное учреждение

высшего профессионального образования

Московский технический университет связи и информатики

----------------------------------------------------------------------------------------------------

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

ЛАБОРАТОРНАЯ РАБОТА № 1

по дисциплине

ОПЕРАЦИОННЫЕ СИСТЕМЫ

на тему:

«Функции получения системной информации»

Выполнил:

Проверил:

Королькова Т.В.

ст. пр. кафедры МКиИТ

Дата__________________________

Москва 2017

Цель работы: получение практических навыков по программированию в Win32 API с использованием аппаратных и системных функций.

Ход работы: в ходе разработки приложения были использованы функции, позволяющие получить и изменить различную системную информацию, такую как имя компьютера, пути системных каталогов, версию ОС, системные метрики, системные параметры, системные цвета. Список данных функций с их описаниями представлен ниже:

Функция

Описание

GetComputerName

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

GetUserName

Получает имя пользователя

GetWindowsDirectory

Получает путь к каталогу Windows

GetSystemDirectory

Получает путь к системному каталогу Windows

GetTempPath

Получает путь к каталогу временных файлов Windows

GetVersionEx

Возвращает информацию о версии операционной системы Windows.

GetSystemMetrics

Возвращает определенную системную метрику в зависимости от переданного в нее параметра. В данной лабораторной работе использовались параметры “SM_MIDEASTENABLED” для проверки доступности арабского языка и иврита, “SM_CYMINIMIZED” и”SM_CXMINIMIZED” для получения высоты и длины уменьшенного окна

SystemParametersInfo

Используется для установки и получения всех системных параметров. В данной лабораторной работе использовались параметры “SPI_GETBEEP” для проверки спикера и ”SPI_GETKEYBOARDCUES”.

GetSysColors

Используется для получения системных цветов. В данной лабораторной работе использовались параметры “COLOR_HIGHLIGHT” для получения цвета выделения текста и “COLOR_HIGHLIGHTTEXT” для получения цвета выделенного текста

SetSysColors

Используется для изменения системных цветов. В данной лабораторной работе использовалась для изменения цветов, полученных через GetSysColors

GetLocalTime

Получает местное время

GetSystemTime

Получает системное время

GetCaretPos

GetCaretBlinkTime

GetUserDefaultLangID

GetSystemDefaultLocaleName

Получает x и y координаты каретки

Получает периодичность мигания каретки в мс.

Получает идентификатор языка пользователя

Получает дефолтное системное имя языка.

Далее приведены код написанной программы и скриншот результата ее работы.

#include <Windows.h>

#include <stdio.h>

#include <tchar.h>

#include <iostream>

#define BUFFER_LENGTH 32767

using namespace std;

void main()

{

system("mode con cols=67 lines=45");

setlocale(LC_ALL, "Russian");

void matchOSVersion(OSVERSIONINFO, char*);

TCHAR localeBuffer[LOCALE_NAME_MAX_LENGTH];

BOOL check, result;

TCHAR infoBuffer[BUFFER_LENGTH];

OSVERSIONINFO osInfo;

char ver[23];

int sysColorMas[2] = { COLOR_HIGHLIGHT ,COLOR_HIGHLIGHTTEXT }, sState;

DWORD newColors[2] = { RGB(139, 0, 0) , RGB(50, 205, 50) }, bufCharCount = BUFFER_LENGTH, i, oldColors[2];

SYSTEMTIME tLoc, tSys;

POINT pCaret;

UINT bCaret;

LANGID lang;

//Display computer name

bufCharCount = BUFFER_LENGTH;

GetComputerName(infoBuffer, &bufCharCount);

_tprintf(TEXT("Computer name: %s \n\n"), infoBuffer);

Sleep(2000);

//Display user name

bufCharCount = BUFFER_LENGTH;

GetUserName(infoBuffer, &bufCharCount);

_tprintf(TEXT("User name: %s \n\n"), infoBuffer);

Sleep(2000);

//Display directories name

GetWindowsDirectory(infoBuffer, BUFFER_LENGTH);

_tprintf(TEXT("Windows directory: %s \n\n"), infoBuffer);

Sleep(2000);

GetSystemDirectory(infoBuffer, BUFFER_LENGTH);

_tprintf(TEXT("System directory: %s \n\n"), infoBuffer);

Sleep(2000);

GetTempPath(BUFFER_LENGTH, infoBuffer);

_tprintf(TEXT("Directory for temporary files: %s \n\n"), infoBuffer);

Sleep(2000);

//Display OS info

osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

GetVersionEx(&osInfo);

matchOSVersion(osInfo,ver);

printf("OS Version: %s \n\n", ver);

Sleep(2000);

//Check for Hewbrew and Arabic

if (GetSystemMetrics(SM_MIDEASTENABLED) == 0)

cout << "Hebrew and Arabic languages are disabled for the system" <<endl<<endl;

else

cout << "Hebrew and Arabic languages are enabled for the system" <<endl<<endl;

Sleep(2000);

//Retrieve hight and width of minimized window

printf("Hight of minimized window is %i, width is %i \n\n", GetSystemMetrics(SM_CYMINIMIZED), GetSystemMetrics(SM_CXMINIMIZED));

Sleep(2000);

//Check the beeper

result = SystemParametersInfo(SPI_GETBEEP, 0, &check, 0);

if (result)

cout << "Beeper is enabled" << endl << endl;

else

cout << "Beeper is disabled" << endl << endl;

Sleep(2000);

//Check access key underlining

result = SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &check, 0);

if (result)

cout << "Menu access keys are always underlined" << endl << endl;

else

cout << "Menu access keys are underlined only when the menu is activated by the keyboard" << endl << endl;

i = GetSysColor(COLOR_HIGHLIGHT);

oldColors[0] = i;

printf("Selected text background: {%i, %i, %i}\n\n",GetRValue(i),GetGValue(i),GetBValue(i));

Sleep(2000);

i = GetSysColor(COLOR_HIGHLIGHTTEXT);

oldColors[1] = i;

printf("Color text of item(s) selected in a control: {%i, %i, %i}\n\n", GetRValue(i), GetGValue(i), GetBValue(i));

Sleep(2000);

printf("Changing system colors for 10 seconds...\n\n");

SetSysColors(2, sysColorMas, newColors);

Sleep(10000);

printf("System colors are changed back to original values\n\n");

SetSysColors(2, sysColorMas, oldColors);

//Get local and system time

GetSystemTime(&tSys);

GetLocalTime(&tLoc);

printf("Current system time is: %02d:%02d \n\n", tSys.wHour, tSys.wMinute);

Sleep(1000);

printf("Current local time is: %02d:%02d \n\n", tLoc.wHour, tLoc.wMinute);

Sleep(1000);

//Get caret position

GetCaretPos(&pCaret);

printf("Current caret position x:%i, y:%i \n\n", pCaret.x, pCaret.y);

//Get caret blink time

if (!GetCaretBlinkTime())

printf("GetCaretBlinkTime error: %u\n", GetLastError());

else

{

bCaret = GetCaretBlinkTime();

printf("Caret blink time is: %i ms \n\n", bCaret);

}

//Getting user's LanfID and locale name

lang = GetUserDefaultLangID();

if (!GetSystemDefaultLocaleName(localeBuffer, LOCALE_NAME_MAX_LENGTH))

{

printf("GetSystemDefaultLocaleName error: %u \n\n", GetLastError());

}

else

{

_tprintf(TEXT("System locale name is: %s \n\n"), localeBuffer);

}

printf("LangID is 0x%x \n\n ", LANG_RUSSIAN);

system("pause");

}

void matchOSVersion(OSVERSIONINFO osVer,char* ver)

{

switch (osVer.dwMajorVersion)

{

case 5:

if (osVer.dwMinorVersion == 0)

strcpy(ver, "Windows 2000");

else strcpy(ver, "Windows XP");

break;

case 6:

if (osVer.dwMinorVersion == 0)

strcpy(ver, "Windows Vista");

else if (osVer.dwMinorVersion == 1)

strcpy(ver, "Windows 7");

else if (osVer.dwMinorVersion == 2)

strcpy(ver, "Windows 8");

else strcpy(ver, "Windows 8.1");

break;

}

}

Рисунок 1 – Результат работы программы

Рисунок 2 – Цвет до изменений

Рисунок 3 – Цвет после изменений

Соседние файлы в папке lab1