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

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

на тему: «Основы программирования с использованием Windows API»

Включения и определения до главной программы: #include <windows.h>

#include <iostream>

#define MAX_BUFFER_SIZE 256 #define MAX_VALUE_NAME 16383 using namespace std;

1. Написать программу, которая при помощи функций Windows API определяет параметры системы

икомпьютера, а именно:

1)версию операционной системы (функция GetVersionEx()) DWORD info, version, platform, major, minor;

info = GetVersion(); version = info & 0x0000ffff;

major = version & 0x000000ff; minor = version >> 8; platform = info >> 16;

cout << "\nWindows v" << major << "." << minor<< " (build " << platform << ")" << endl;

2)системный каталог (функция GetSystemDirectory())

char buffer[MAX_BUFFER_SIZE]; GetSystemDirectory(buffer, MAX_BUFFER_SIZE); cout << "System Directory: " << buffer << endl;

3) название компьютера и псевдоним текущего пользователя (функции: GetComputerName(), GetUserName())

DWORD BufCharCount = MAX_BUFFER_SIZE; GetComputerName(buffer, &BufCharCount); cout << "Computer Name: " << buffer << endl; GetUserName(buffer, &BufCharCount);

cout << "User Name: " << buffer << "\n" << endl;

4) для каждого тома (функции: FindFirstVolume(), FindNextVolume(), FindVolumeClose()) вывести следующие характеристики:

-служебное имя тома (получаемое при переборе);

-первый путь в файловой системе (GetVolumePathNamesForVolumeName());

-объем тома и количество свободного места, доступного текущему пользователю (функция GetDiskFreeSpaceEx()).

char Names[MAX_BUFFER_SIZE]; ULARGE_INTEGER FreeBytesAvailable; ULARGE_INTEGER TotalNumberOfBytes;

HANDLE search = FindFirstVolume(buffer, MAX_BUFFER_SIZE); cout << "Volumes and characteristics: " << "\n" << endl;

do {

cout << buffer << endl;

GetVolumePathNamesForVolumeName(buffer, Names, MAX_BUFFER_SIZE, &BufCharCount); char* path = Names;

cout << "Mount point: " << path << endl; if (GetDiskFreeSpaceEx(Names,

&FreeBytesAvailable,

&TotalNumberOfBytes,

nullptr)==0)

cout << "No information.\n" << endl;

else {

cout << "Total Number Of Bytes: " << TotalNumberOfBytes.QuadPart << endl; cout << "Free Bytes Available: " << FreeBytesAvailable.QuadPart << "\n" << endl;

}

} while (FindNextVolume(search, buffer, MAX_BUFFER_SIZE)); if (GetLastError() != ERROR_NO_MORE_FILES)

cout << "Error. Error code: " << GetLastError() << endl; FindVolumeClose(search);

5) список программ, запускаемых при старте системы, из реестра Windows (функции: RegOpenKeyEx(), RegEnumValue())

cout << "Run programs:" << endl;

HKEY hKey = HKEY_CURRENT_USER;

LPCTSTR lpSubKey = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");

2

long OpenK = RegOpenKeyEx(hKey, lpSubKey, 0, KEY_READ, &hKey); DWORD i = 0;

TCHAR achValue[MAX_VALUE_NAME]; DWORD cchValue;

if (OpenK == ERROR_SUCCESS) { for (;;) {

cchValue = MAX_VALUE_NAME;

if (RegEnumValue(hKey, i, achValue, &cchValue, nullptr, nullptr, nullptr, nullptr) == ERROR_SUCCESS) {

cout << achValue << endl; i++;

}else { break;

}

}

} else {

cout << "Error" << endl;

}

RegCloseKey(hKey);

2.Добавить в программу функциональность измерения производительности ЦП:

1)замер рабочей частоты f ЦП функцией QueryPerformanceFrequency() LARGE_INTEGER li;

QueryPerformanceFrequency(&li); LONGLONG f = li.QuadPart;

cout << "\nfrequency: " << f << " takt/sec" << endl;

2)подсчет количества тактов t ЦП, которое занимает выполнение программой пункта 1), функцией QueryPerformanceCounter() и выдачу ответа в мкc

LARGE_INTEGER li; QueryPerformanceCounter(&li); LONGLONG t1 = li.QuadPart; {пункт 1} QueryPerformanceCounter(&li); LONGLONG t2 = li.QuadPart;

cout << "delta_t: " << 1000000 * (t2 - t1) / f << " microsec" << endl;

3

Соседние файлы в папке Windows лаб 1-4