lab1 / Lab1
.docx
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Федеральное государственное образовательное бюджетное учреждение
высшего профессионального образования
Московский технический университет связи и информатики
----------------------------------------------------------------------------------------------------
Кафедра Математической кибернетики и информационных технологий
ЛАБОРАТОРНАЯ РАБОТА № 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 – Цвет после изменений