Лабораторные работы / Windows лаб 1-4 / lab1_otchet
.pdfОтчет по лабораторной работе № 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