laba1
This commit is contained in:
parent
ad0f3323f0
commit
1fbb71ecb6
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
356
Lab1/Lab1.c
356
Lab1/Lab1.c
@ -7,79 +7,57 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void printError(const wchar_t* message) {
|
||||||
|
wprintf(L"%s: %lu\n", message, GetLastError());
|
||||||
|
|
||||||
void PrintAvailableDisplayModes() {
|
|
||||||
DEVMODE dm; // содержит сведения о инициализации и среде принтера или устройства отображения.
|
|
||||||
int count = 0;
|
|
||||||
while (EnumDisplaySettings(NULL, count++, &dm)) { //позволяет получить доступные варианты разрешений и цветов видеосистемы;
|
|
||||||
printf("Resolution: %dx%d, Color: %d bits\n", dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintCurrentDisplayMode() {
|
|
||||||
DEVMODE dm;
|
|
||||||
if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm)) {
|
|
||||||
printf("Current Resolution: %dx%d, Current Color Depth: %d bits\n", dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("Unable to retrieve current display settings.\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ChangeScreenResolution(int width, int height, int colorDepth) {
|
void listFilesAndDirectories(wchar_t* drivePath) {
|
||||||
DEVMODE dm;
|
WIN32_FIND_DATA findFileData;
|
||||||
ZeroMemory(&dm, sizeof(dm));
|
//wchar_t searchPath[MAX_PATH];
|
||||||
dm.dmSize = sizeof(dm);
|
//swprintf(searchPath, MAX_PATH, L"%s*", drivePath);
|
||||||
dm.dmPelsWidth = width;
|
SetCurrentDirectory(drivePath);
|
||||||
dm.dmPelsHeight = height;
|
HANDLE hFind = FindFirstFile(L"*", &findFileData);
|
||||||
dm.dmBitsPerPel = colorDepth;
|
if (hFind == INVALID_HANDLE_VALUE) {
|
||||||
dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
|
wprintf(L"Ошибка доступа к директории.\n");
|
||||||
|
|
||||||
LONG result = ChangeDisplaySettings(&dm, CDS_UPDATEREGISTRY);
|
|
||||||
if (result == DISP_CHANGE_SUCCESSFUL) {
|
|
||||||
printf("Resolution changed successfully to %dx%d, %d bits color depth.\n", width, height, colorDepth);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("Failed to change resolution.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ChangeOboi(const char* wallpaperPath) { // указ
|
|
||||||
|
|
||||||
if (GetFileAttributes(wallpaperPath) == INVALID_FILE_ATTRIBUTES) {
|
|
||||||
printf("File not found: %s\n", wallpaperPath);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Изменение обоев
|
wprintf(L"Список файлов и каталогов в корне %s:\n", drivePath);
|
||||||
if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)wallpaperPath, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE)) {
|
do {
|
||||||
printf("Wallpaper changed successfully to %s\n", wallpaperPath);
|
wprintf(L"%s\n", findFileData.cFileName);
|
||||||
}
|
} while (FindNextFile(hFind, &findFileData) != 0);
|
||||||
else {
|
|
||||||
printf("Failed to change wallpaper to %s\n", wallpaperPath);
|
FindClose(hFind);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Функция для получения цвета пикселя под курсором мыши
|
|
||||||
void GetPixelColorUnderCursor() {
|
|
||||||
|
|
||||||
for (int i=0; i < 10; i++) {
|
|
||||||
POINT pt; // пара координат
|
|
||||||
if (GetCursorPos(&pt)) {
|
void deleteFileOrDirectory(wchar_t* path) {
|
||||||
HDC hdc = GetDC(NULL); //контекст устройства для экрана
|
DWORD attributes = GetFileAttributes(path);
|
||||||
COLORREF color = GetPixel(hdc, pt.x, pt.y); //RGB red green blue
|
if (attributes == INVALID_FILE_ATTRIBUTES) {
|
||||||
ReleaseDC(NULL, hdc);
|
wprintf(L"Файл или каталог не найден.\n");
|
||||||
printf("Color under cursor: RGB(%d, %d, %d)\n", GetRValue(color), GetGValue(color), GetBValue(color));
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||||
|
// Удаление каталога
|
||||||
|
if (RemoveDirectory(path)) {
|
||||||
|
wprintf(L"Каталог %s успешно удален.\n", path);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf("Unable to get cursor position.\n");
|
wprintf(L"Не удалось удалить каталог %s.\n", path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Удаление файла
|
||||||
|
if (DeleteFile(path)) {
|
||||||
|
wprintf(L"Файл %s успешно удален.\n", path);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wprintf(L"Не удалось удалить файл %s.\n", path);
|
||||||
}
|
}
|
||||||
Sleep(1000);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,23 +65,263 @@ void GetPixelColorUnderCursor() {
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
|
||||||
PrintAvailableDisplayModes();
|
setlocale(LC_ALL, "");
|
||||||
|
|
||||||
|
wprintf(L"LABA 1\n");
|
||||||
|
|
||||||
|
//GetCurrentDirectory
|
||||||
|
WCHAR buffer[MAX_PATH];
|
||||||
|
DWORD length;
|
||||||
|
|
||||||
|
// Получаем текущую директорию
|
||||||
|
length = GetCurrentDirectory(MAX_PATH, buffer);
|
||||||
|
|
||||||
|
wprintf(L"Current directory : %s\n", buffer);
|
||||||
|
|
||||||
|
|
||||||
PrintCurrentDisplayMode();
|
|
||||||
|
//SetCurrentDirectory
|
||||||
|
SetCurrentDirectory(L"D:\\univer");
|
||||||
|
WCHAR buffer1[MAX_PATH];
|
||||||
|
DWORD length1;
|
||||||
|
|
||||||
|
// Получаем текущую директорию
|
||||||
|
length1 = GetCurrentDirectory(MAX_PATH, buffer1);
|
||||||
|
|
||||||
|
wprintf(L"Current directory after change : %s\n", buffer1);
|
||||||
|
|
||||||
|
|
||||||
//ChangeScreenResolution(1920, 1440, 32);
|
|
||||||
|
|
||||||
ChangeScreenResolution(2160, 1440, 32);
|
//GetLogicalDrives
|
||||||
|
DWORD drives = GetLogicalDrives();
|
||||||
|
|
||||||
ChangeOboi(L"D:\\bts.png");
|
printf("Logical drives bitmask: 0x%lx\n", drives);
|
||||||
|
|
||||||
GetPixelColorUnderCursor();
|
for (int i = 0; i < 26; i++) {
|
||||||
|
// Проверяем, установлен ли бит, соответствующий текущему диску
|
||||||
|
if (drives & (1 << i)) {
|
||||||
|
// Формируем имя диска (например, "C:\")
|
||||||
|
char driveName[4] = { 'A' + i, ':', '\\', '\0' };
|
||||||
|
printf(driveName);
|
||||||
|
|
||||||
system("pause");
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
//FindFirstFile FindNextFileW FindClose
|
||||||
|
WIN32_FIND_DATA findFileData;
|
||||||
|
HANDLE hFind = FindFirstFile(L"D:\\poznanie\\*", &findFileData);;
|
||||||
|
|
||||||
|
if (hFind != INVALID_HANDLE_VALUE) {
|
||||||
|
do {
|
||||||
|
wprintf(L"Найден файл: %s\n", findFileData.cFileName);
|
||||||
|
} while (FindNextFileW(hFind, &findFileData) != 0);
|
||||||
|
|
||||||
|
// Закрываем дескриптор поиска
|
||||||
|
FindClose(hFind);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
wchar_t dir[512] = L"D:\\poznanie"; // Укажите ваш путь
|
||||||
|
wchar_t filePath[512];
|
||||||
|
|
||||||
|
// Создание полного пути к файлу
|
||||||
|
swprintf(filePath, 512, L"%s\\example.txt", dir);
|
||||||
|
|
||||||
|
// Создание и работа с файлом
|
||||||
|
HANDLE hFile = CreateFileW(filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Запись в файл
|
||||||
|
const char* data = "Hello, World!"; // Данные для записи
|
||||||
|
DWORD written;
|
||||||
|
if (!WriteFile(hFile, data, (DWORD)strlen(data), &written, NULL)) {
|
||||||
|
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Закрытие файла
|
||||||
|
CloseHandle(hFile);
|
||||||
|
|
||||||
|
// Открытие файла для чтения
|
||||||
|
hFile = CreateFileW(filePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
if (hFile == INVALID_HANDLE_VALUE) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Чтение из файла
|
||||||
|
char bufferRead[256]; // Буфер для чтения
|
||||||
|
DWORD read;
|
||||||
|
if (!ReadFile(hFile, bufferRead, sizeof(bufferRead) - 1, &read, NULL)) {
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
bufferRead[read] = '\0'; // Завершаем строку
|
||||||
|
|
||||||
|
// Печать прочитанных данных
|
||||||
|
printf("Прочитанные данные: %s\n", bufferRead); // Используйте %s для char
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
wchar_t filePath1[256] = L"C:\\ProgramData";
|
||||||
|
wchar_t fullPath[256];
|
||||||
|
|
||||||
|
if (!GetFullPathNameW(filePath1, 256, fullPath, NULL)) {
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
wprintf(L"Полный путь к файлу: %s\n", fullPath);
|
||||||
|
|
||||||
|
// Получение атрибутов файла
|
||||||
|
DWORD attributes = GetFileAttributesW(filePath1);
|
||||||
|
if (attributes == INVALID_FILE_ATTRIBUTES) {
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
wprintf(L"Атрибуты файла: %lu\n", attributes);
|
||||||
|
if (attributes & FILE_ATTRIBUTE_HIDDEN) { // Проверка на скрытый атрибут
|
||||||
|
wprintf(L"Атрибуты файла: скрытый\n");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_SYSTEM) {
|
||||||
|
wprintf(L"Атрибуты файла: Файл или каталог, часть или весь каталог которого использует операционная система.\n");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_ARCHIVE) {
|
||||||
|
wprintf(L"Атрибуты файла: Файл или каталог, который является архивным файлом или каталогом.\n ");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||||
|
wprintf(L"Атрибуты файла: Директория\n ");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_DEVICE) {
|
||||||
|
wprintf(L"Атрибуты файла: Директория \n");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_NORMAL) {
|
||||||
|
wprintf(L"Атрибуты файла: Файл, у которого не установлены другие атрибуты.\n ");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_TEMPORARY) {
|
||||||
|
wprintf(L"Атрибуты файла: Файл, который используется для временного хранения. \n ");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_SPARSE_FILE) {
|
||||||
|
wprintf(L"Атрибуты файла: Файл, который является разреженным файлом. \n");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_REPARSE_POINT) {
|
||||||
|
wprintf(L"Атрибуты файла: Файл или каталог, имеющий связанную точку повторной обработки, или файл, являющийся символической ссылкой.Файл или каталог, имеющий связанную точку повторной обработки, или файл, являющийся символической ссылкой.\n ");
|
||||||
|
}
|
||||||
|
if (attributes & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED) {
|
||||||
|
wprintf(L"Атрибуты файла: Файл или каталог не подлежит индексации службой индексации контента. \n");
|
||||||
|
}
|
||||||
|
// Получение размера файла
|
||||||
|
|
||||||
|
|
||||||
|
DWORD fileSize = GetFileSize(hFile, NULL);
|
||||||
|
if (fileSize == INVALID_FILE_SIZE) {
|
||||||
|
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
wprintf(L"Размер файла: %lu байт\n", fileSize);
|
||||||
|
|
||||||
|
// Получение времени создания файла
|
||||||
|
FILETIME creationTime, lastAccessTime, lastWriteTime;
|
||||||
|
if (!GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime)) {
|
||||||
|
|
||||||
|
CloseHandle(hFile);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SYSTEMTIME stUTC, stLocal;
|
||||||
|
FileTimeToSystemTime(&creationTime, &stUTC);
|
||||||
|
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
|
||||||
|
wprintf(L"Время создания файла: %02d/%02d/%d %02d:%02d\n", stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, stLocal.wMinute);
|
||||||
|
|
||||||
|
// Закрытие файла
|
||||||
|
CloseHandle(hFile);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
|
||||||
|
DWORD drives1 = GetLogicalDrives();
|
||||||
|
wprintf(L"Доступные логические диски:\n");
|
||||||
|
|
||||||
|
for (int i = 0; i < 26; i++) {
|
||||||
|
if (drives1 & (1 << i)) {
|
||||||
|
wchar_t driveLetter = L'A' + i;
|
||||||
|
wprintf(L"%c:\\\n", driveLetter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
wprintf(L"Доступные логические диски:\n");
|
||||||
|
//GetLogicalDriveStrings
|
||||||
|
WCHAR b[256];
|
||||||
|
|
||||||
|
// Получаем строки логических дисков
|
||||||
|
DWORD result = GetLogicalDriveStrings(256, b);
|
||||||
|
|
||||||
|
WCHAR* drive = b;
|
||||||
|
// Пока не достигнут конец всех строк
|
||||||
|
while (*drive) {
|
||||||
|
wprintf(L"Диск: %ls\n", drive);
|
||||||
|
// Переходим к следующей строке
|
||||||
|
drive += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wchar_t chosenDrive[4];
|
||||||
|
wprintf(L"\nВведите логический диск (например, C:\\): ");
|
||||||
|
wscanf_s(L"%3s", chosenDrive, (unsigned)_countof(chosenDrive));
|
||||||
|
|
||||||
|
listFilesAndDirectories(chosenDrive);
|
||||||
|
|
||||||
|
wchar_t targetPath[MAX_PATH];
|
||||||
|
wprintf(L"\nВведите имя файла или каталога для удаления (например, C:\\example.txt): ");
|
||||||
|
wscanf_s(L"%259s", targetPath, (unsigned)_countof(targetPath));
|
||||||
|
|
||||||
|
deleteFileOrDirectory(targetPath);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//1. Вывести на экран доступные варианты разрешения экрана и разрядности цвета.
|
||||||
|
// Обозначить текущие значения.
|
||||||
|
// Предусмотреть возможность изменения разрешения экрана,
|
||||||
|
// изменения обоев рабочего стола.
|
||||||
|
// Выводить цвет точки, на которую указывает курсор мыши.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user