Вы находитесь на странице: 1из 6

МИНОБРНАУКИ РОССИИ

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


высшего образования
«МИРЭА – Российский технологический университет»

РТУ МИРЭА

Институт информационных технологий (ИТ)


Кафедра инструментального и прикладного программного обеспечения (ИППО)

Отчёт по лабораторной работе №2


по дисциплине
«Системное программное обеспечение»

Выполнил студент группы ИКБО-01-17 Крюков М.С.

Принял ____________________

Выполнено «__» _______ 201_ г. Крюков М.С.

«Зачтено» «__» _______ 201_ г. ____________________


М. РТУ МИРЭА. 2020г
Содержание

Содержание 2
Задание 3
Ход работы 3
Вывод 5
Задание
Разработать программу, обеспечивающую получение системной информации
(можно консольное приложение):
1. имя компьютера, имя пользователя;
2. пути к системным каталогам Windows;
3. версия операционной системы;
4. системные метрики (не менее двух метрик);
5. системные параметры (не менее двух параметров).

Ход работы
Напишем программу на языке C. Исходный код приведёт в таблице 1.
Таблица 1 – Исходный код программы на C
#include <windows.h>
#include <winuser.h>
#include <tchar.h>
#include <locale.h>
#include <string.h>
#include <Lmcons.h>
#include <stdio.h>
#include <stdlib.h>

LPSTR makeBuffer(DWORD bufferSize) {


return (LPSTR) malloc(sizeof(TCHAR) * bufferSize);
}

void freeBuffer(LPSTR buffer) {


free(buffer);
}

LPSTR getString(int (*func)(LPSTR, DWORD*), DWORD bufferSize) {


LPSTR buffer = makeBuffer(bufferSize);
func(buffer, &bufferSize);
return buffer;
}

int main()
{
setlocale(LC_CTYPE, "");

LPSTR buffer;

printf("[ Names ]\n");

buffer = getString(GetUserName, UNLEN + 1);


printf("User name:\t\t%s\n", buffer);
freeBuffer(buffer);
buffer = getString(GetComputerName, MAX_COMPUTERNAME_LENGTH + 1);
printf("PC name:\t\t%s\n", buffer);
freeBuffer(buffer);

printf("\n[ Directories ]\n");

buffer = getString(GetWindowsDirectory, 1024);


printf("Windows directory:\t%s\n", buffer);
freeBuffer(buffer);

buffer = getString(GetSystemDirectory, 1024);


printf("System directory:\t%s\n", buffer);
freeBuffer(buffer);

printf("\n[ Version ]\n");

DWORD dwVersion = GetVersion();


DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
DWORD dwBuild = 0;
if (dwVersion < 0x80000000)
dwBuild = (DWORD)(HIWORD(dwVersion));
printf("Version:\t\t%lu.%lu (%lu)\n", dwMajorVersion, dwMinorVersion, dwBuild);

int value;

printf("\n[ SystemMetrics ]\n");

value = GetSystemMetrics(SM_MOUSEPRESENT);
printf("Mouse present:\t\t%i\n", value != 0);

value = GetSystemMetrics(SM_CMONITORS);
printf("Monitors present:\t%d\n", value);

value = GetSystemMetrics(SM_NETWORK);
printf("Network present:\t%i\n", value & 1);

printf("\n[ SystemParameters ]\n");

SystemParametersInfo(SPI_GETBEEP, 0, &value, 0);


printf("Beeping is on:\t%i\n", value);

SystemParametersInfo(SPI_GETBORDER, 0, &value, 0);


printf("Border mp width is:\t%i\n", value);

return 0;
}

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


Вывод
Была разработана программа, демонстрирующая взаимодействие с WinAPI.
Поставленные задачи в рамках данной работы были выполнены и цели достигнуты.