Лабораторные работы / Windows лаб 1-4 / lab1_kod
.pdfСистемное программное обеспечение Лаб. Работа № 1
Основы программирования с использованием Windows API
#include <windows.h> #include <iostream>
#define MAX_BUFFER_SIZE 256 #define MAX_VALUE_NAME 16383
using namespace std;
int main() {
//Определение текущего значения счетчика до пункта 1
LARGE_INTEGER li; QueryPerformanceCounter(&li); LONGLONG t1 = li.QuadPart;
//Определение версии ОС
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;
//Определение текущего значения счетчика после пункта 1
QueryPerformanceCounter(&li); LONGLONG t2 = li.QuadPart;
//Определение системного каталога char buffer[MAX_BUFFER_SIZE];
GetSystemDirectory(buffer, MAX_BUFFER_SIZE); cout << "System Directory: " << buffer << endl;
//Определение названия компьютера
DWORD BufCharCount = MAX_BUFFER_SIZE; GetComputerName(buffer, &BufCharCount); cout << "Computer Name: " << buffer << endl;
//Определение псевдонима текущего пользователя
GetUserName(buffer, &BufCharCount);
cout << "User Name: " << buffer << "\n" << endl;
//Определение характеристик томов 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;//Вывод служебного имени очередного тома
1
//Определение первого пути в файловой системе для очередного тома
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);
//Определение списка программ, запускаемых при старте системы, из реестра Windows cout << "Run programs:" << endl;
HKEY hKey = HKEY_CURRENT_USER;
LPCTSTR lpSubKey = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"); 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);
//Замер рабочей частоты
QueryPerformanceFrequency(&li); LONGLONG f = li.QuadPart;
cout << "\nfrequency: " << f << " takt/sec" << endl;
//Подсчет количества тактов, которое занимает выполнение программой пункта 1 cout << "delta_t: " << 1000000 * (t2 - t1) / f << " microsec" << endl;
return 0;
}
2