diff --git a/.vs/Lab1/FileContentIndex/6849abb4-05bd-48d3-af82-acdee92d1fd0.vsidx b/.vs/Lab1/FileContentIndex/6849abb4-05bd-48d3-af82-acdee92d1fd0.vsidx deleted file mode 100644 index afac34d..0000000 Binary files a/.vs/Lab1/FileContentIndex/6849abb4-05bd-48d3-af82-acdee92d1fd0.vsidx and /dev/null differ diff --git a/.vs/Lab1/FileContentIndex/819cd5de-6bb0-4b9f-9096-aa50a57d9398.vsidx b/.vs/Lab1/FileContentIndex/819cd5de-6bb0-4b9f-9096-aa50a57d9398.vsidx new file mode 100644 index 0000000..5557ea1 Binary files /dev/null and b/.vs/Lab1/FileContentIndex/819cd5de-6bb0-4b9f-9096-aa50a57d9398.vsidx differ diff --git a/.vs/Lab1/v17/.suo b/.vs/Lab1/v17/.suo index 0d03eab..69fd24d 100644 Binary files a/.vs/Lab1/v17/.suo and b/.vs/Lab1/v17/.suo differ diff --git a/.vs/Lab1/v17/Browse.VC.db b/.vs/Lab1/v17/Browse.VC.db index 91ab219..3fa3d47 100644 Binary files a/.vs/Lab1/v17/Browse.VC.db and b/.vs/Lab1/v17/Browse.VC.db differ diff --git a/Lab1/Lab1.c b/Lab1/Lab1.c index b8bfd4d..d3ccd5c 100644 --- a/Lab1/Lab1.c +++ b/Lab1/Lab1.c @@ -7,103 +7,321 @@ - - - -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 printError(const wchar_t* message) { + wprintf(L"%s: %lu\n", message, GetLastError()); } -void ChangeScreenResolution(int width, int height, int colorDepth) { - DEVMODE dm; - ZeroMemory(&dm, sizeof(dm)); - dm.dmSize = sizeof(dm); - dm.dmPelsWidth = width; - dm.dmPelsHeight = height; - dm.dmBitsPerPel = colorDepth; - dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL; - - 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); +void listFilesAndDirectories(wchar_t* drivePath) { + WIN32_FIND_DATA findFileData; + //wchar_t searchPath[MAX_PATH]; + //swprintf(searchPath, MAX_PATH, L"%s*", drivePath); + SetCurrentDirectory(drivePath); + HANDLE hFind = FindFirstFile(L"*", &findFileData); + if (hFind == INVALID_HANDLE_VALUE) { + wprintf(L"Ошибка доступа к директории.\n"); return; } - // Изменение обоев - if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)wallpaperPath, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE)) { - printf("Wallpaper changed successfully to %s\n", wallpaperPath); - } - else { - printf("Failed to change wallpaper to %s\n", wallpaperPath); - } + wprintf(L"Список файлов и каталогов в корне %s:\n", drivePath); + do { + wprintf(L"%s\n", findFileData.cFileName); + } while (FindNextFile(hFind, &findFileData) != 0); + + FindClose(hFind); } -// Функция для получения цвета пикселя под курсором мыши -void GetPixelColorUnderCursor() { - for (int i=0; i < 10; i++) { - POINT pt; // пара координат - if (GetCursorPos(&pt)) { - HDC hdc = GetDC(NULL); //контекст устройства для экрана - COLORREF color = GetPixel(hdc, pt.x, pt.y); //RGB red green blue - ReleaseDC(NULL, hdc); - printf("Color under cursor: RGB(%d, %d, %d)\n", GetRValue(color), GetGValue(color), GetBValue(color)); + + +void deleteFileOrDirectory(wchar_t* path) { + DWORD attributes = GetFileAttributes(path); + if (attributes == INVALID_FILE_ATTRIBUTES) { + wprintf(L"Файл или каталог не найден.\n"); + return; + } + + if (attributes & FILE_ATTRIBUTE_DIRECTORY) { + // Удаление каталога + if (RemoveDirectory(path)) { + wprintf(L"Каталог %s успешно удален.\n", path); } 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); } } int main() { - - PrintAvailableDisplayModes(); - - PrintCurrentDisplayMode(); +setlocale(LC_ALL, ""); - - //ChangeScreenResolution(1920, 1440, 32); +wprintf(L"LABA 1\n"); - ChangeScreenResolution(2160, 1440, 32); +//GetCurrentDirectory +WCHAR buffer[MAX_PATH]; +DWORD length; - ChangeOboi(L"D:\\bts.png"); +// Получаем текущую директорию +length = GetCurrentDirectory(MAX_PATH, buffer); - GetPixelColorUnderCursor(); +wprintf(L"Current directory : %s\n", buffer); - system("pause"); - return 0; - + +//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); + + + +//GetLogicalDrives +DWORD drives = GetLogicalDrives(); + +printf("Logical drives bitmask: 0x%lx\n", drives); + +for (int i = 0; i < 26; i++) { + // Проверяем, установлен ли бит, соответствующий текущему диску + if (drives & (1 << i)) { + // Формируем имя диска (например, "C:\") + char driveName[4] = { 'A' + i, ':', '\\', '\0' }; + printf(driveName); + + } +} +printf("\n"); + + + + +//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. Вывести на экран доступные варианты разрешения экрана и разрядности цвета. +// Обозначить текущие значения. +// Предусмотреть возможность изменения разрешения экрана, +// изменения обоев рабочего стола. +// Выводить цвет точки, на которую указывает курсор мыши. + + + +