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.
										
									
								
							
							
								
								
									
										354
									
								
								Lab1/Lab1.c
									
									
									
									
									
								
							
							
						
						
									
										354
									
								
								Lab1/Lab1.c
									
									
									
									
									
								
							| @ -7,79 +7,57 @@ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 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); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -87,23 +65,263 @@ void GetPixelColorUnderCursor() { | ||||
| 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); | ||||
| 
 | ||||
| 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); | ||||
| 
 | ||||
|     GetPixelColorUnderCursor(); | ||||
| 
 | ||||
|     system("pause"); | ||||
| 
 | ||||
| return 0; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //1.	Вывести на экран доступные варианты разрешения экрана и разрядности цвета. 
 | ||||
| // Обозначить текущие значения. 
 | ||||
| // Предусмотреть возможность изменения разрешения экрана, 
 | ||||
| // изменения обоев рабочего стола.
 | ||||
| //  Выводить цвет точки, на которую указывает курсор мыши.
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user