#include #include #include #include // Лабораторная работа № 2 - устройства ручного ввода // --- Информация о клавиатуре int getLogicalDriveStrings() { printf("- GetLogicalDriveStrings:\n"); char buffer[4096]; // сам буфер для строки DWORD bufSize = sizeof(buffer) - 1; // размер буфера, в который нужно записывать строку с дисками GetLogicalDriveStrings(bufSize, buffer); // Получение списка логических дисков char *drive = buffer; while (*drive) { // перебор дисков printf("Диск: %s\n", drive); // следующий диск drive += strlen(drive) + 1; } return 0; } int getVolumeInformation() { printf("- GetVolumeInformation:\n"); char volumeName[256]; char fileSystemName[256]; DWORD serialNumber; DWORD maxComponentLength; DWORD fileSystemFlags; // Получение информации о текущем диске GetVolumeInformation("C:\\", // указатель на строку, содержащую корневой каталог тома volumeName, // буфер, который получит имя тома sizeof(volumeName), // длина буфера для имени тома &serialNumber, // указатель на переменную, которая получит имя указанного тома &maxComponentLength, // &fileSystemFlags, // fileSystemName, // буфер для названия файловой системы sizeof(fileSystemName)); // размер буфера названия файловой системы printf("Имя тома: %s\n", volumeName); printf("Серийный номер: %lu\n", serialNumber); printf("Max Component Length: %lu\n", maxComponentLength); printf("Тип файловой системы: %s\n", fileSystemName); printf("File System Flags: %lu\n", fileSystemFlags); return 0; } // --- long getFileSize(LPCSTR path) { printf("- GetFileSize:\n"); HANDLE hFile; DWORD fileSize; unsigned long structLargeInt; // Открытие файла hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Получение размера файла structLargeInt = GetFileSize(hFile, NULL); // Закрытие файла CloseHandle(hFile); // Вывод размера файла printf("Размер файла: %lu байт\n", structLargeInt); return 0; } int findNextFile() { printf("- FindNextFile:\n"); WIN32_FIND_DATA findData; HANDLE hFind; char path[MAX_PATH]; // Задаем путь к директории, которую нужно просканировать strcpy(path, "..\\*"); // Начинаем поиск первого файла/папки в директории hFind = FindFirstFile(path, &findData); // Перебираем все файлы и папки в директории do { if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("Папка: %s\n", findData.cFileName); } else { printf("\tФайл: %s\n", findData.cFileName); } } while (FindNextFile(hFind, &findData)); // Закрытие дескриптора поиска FindClose(hFind); return 0; } int getWindowsDirectory() { printf("- GetWindowsDirectory:\n"); char windowsDir[255]; // сюда запишутся символы пути GetWindowsDirectory(windowsDir, sizeof(windowsDir)); printf("Виндосв папка тут: %s\n", windowsDir); return 0; } int compareFileTime(LPCSTR path_1, LPCSTR path_2) { printf("- CompareFileTime:\n"); FILETIME fileTime1; FILETIME fileTime2; // первый файл HANDLE file1 = CreateFile(path_1, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // время изменения первого файла GetFileTime(file1, NULL, NULL, &fileTime1); // закрываем первый файл CloseHandle(file1); // Открываем второй файл HANDLE file2 = CreateFile(path_2, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Получаем время изменения второго файла GetFileTime(file2, NULL, NULL, &fileTime2); // Закрываем второй файл CloseHandle(file2); // Сравниваем время изменения файлов int comparisonResult = CompareFileTime(&fileTime1, &fileTime2); if (comparisonResult == 1) { printf("Файл 1 был изменен раньше файла 2\n"); } else if (comparisonResult == -1) { printf("Файл 2 был изменен раньше файла 1\n"); } else { printf("Время изменения файлов одинаково\n"); } return 0; } // --- int setLocalTime() { printf("- SetLocalTime:\n"); // Создание структуры SYSTEMTIME для установки времени SYSTEMTIME systemTime; // Заполнение структуры SYSTEMTIME данными текущего времени GetLocalTime(&systemTime); printf("Дата и время ДО изменения: %02d-%02d-%d %02d:%02d:%02d\n", systemTime.wDay, systemTime.wMonth, systemTime.wYear, systemTime.wHour, systemTime.wMinute, systemTime.wSecond); // Увеличение часового значения на 1 if (systemTime.wHour < 23) { systemTime.wHour++; } else { systemTime.wHour = 0; } // Установка нового времени с использованием SetLocalTime SetLocalTime(&systemTime); printf("Время успешно изменено\n"); printf("Дата и время ПОСЛЕ изменения: %02d-%02d-%d %02d:%02d:%02d\n", systemTime.wDay, systemTime.wMonth, systemTime.wYear, systemTime.wHour, systemTime.wMinute, systemTime.wSecond); return 0; } void getFileAttributes(LPCSTR path){ DWORD fileAttributes = GetFileAttributes(path); if (fileAttributes & FILE_ATTRIBUTE_READONLY) { printf("\n/Read-only"); } if (fileAttributes & FILE_ATTRIBUTE_HIDDEN) { printf("\n/Hidden"); } if (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("\n/Directory"); }// и так далее для других атрибутов файла... printf("\n"); } int setFileAttributes(LPCSTR path) { printf("- SetFileAttributes:\n"); // Gуть к файлу // Сбрасываем атрибуты файла SetFileAttributes(path, (DWORD) NULL); // Текущие атрибуты файла printf("\tТекущие атрибуты файла ДО замены: "); getFileAttributes(path); // Устанавливаем атрибуты файла DWORD newFileAttributes = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY; BOOL result = SetFileAttributes( path, (DWORD) newFileAttributes); printf("\tТекущие атрибуты файла ПОСЛЕ замены: "); getFileAttributes(path); return 0; } int createFile() { printf("- CreateFile:\n"); HANDLE hFile; char* fileName = "example.txt"; // Создание файла hFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Запись в файл char* data = "Hello, World!"; DWORD bytesWritten; WriteFile(hFile, data, strlen(data), &bytesWritten, NULL); // Закрытие файла CloseHandle(hFile); // Повторное открытие файла hFile = CreateFile(fileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Чтение из файла const int bufferSize = 100; char buffer[bufferSize]; DWORD bytesRead; if (!ReadFile(hFile, buffer, bufferSize, &bytesRead, NULL)) { printf("Failed to read from file.\n"); CloseHandle(hFile); return 1; } // Вывод содержимого файла printf("Содержимое файла: %.*s\n", bytesRead, buffer); // Закрытие файла CloseHandle(hFile); return 0; } // --- Информация о клавиатуре void getKeyboardType(){ printf("\t- getKeyboardType()\n"); BYTE typeValue; typeValue = GetKeyboardType(0); printf("- Информация о клавиатуре:\n"); switch (typeValue) { case 1: printf("83-клавишная клавиатура для IBM PC/XT -совместимых компьютеров\n"); break; case 2: printf("102-клавишная клавиатура Olivetti\n"); break; case 3: printf("IBM PC/AT -совместимая клавиатура (84клавиши)\n"); break; case 4: printf("Расширенная IBM-клавиатура (101- или 102 клавиши)\n"); break; case 5: printf("Клавиатура Nokia 1050\n"); break; case 6: printf("Клавиатура Nokia 9140\n"); break; case 7: printf("Японская клавиатура\n"); break; default: printf("Видимо клавиатуры не существует\n"); break; } printf("Число функциональных клавиш = %d\n", GetKeyboardType(2L)); } // позволяет получить тип клавиатуры и количество функциональных клавиш void getKeyboardState(){ printf("\n\t- getKeyboardState()\n"); BYTE keyState[256] = {0}; // Получение состояния всех клавиш GetKeyboardState(keyState); // Вывод номеров нажатых клавиш в консоль printf("На момент запуска программы были нажаты клавиши под номерами:\n"); for (int i = 0; i < 256; i++) { if (keyState[i] & 0x80) { printf("Клавиша %d\n", i); } } } // позволяет получить текущее состояние всех клавиш (клавиатуры и мыши) // --- Информация о мыши void getCursorPos(){ printf("\t- getCursorPos()\n"); POINT cp; GetCursorPos(&cp); printf("Текущая позиция курсора: (%ld, %ld)\n", cp.x, cp.y); } // указывает положение курсора мыши void getCaretBlinkTime(){ printf("\n\t- getCaretBlinkTime()\n"); printf("Время мерцания каретки - %dмс\n", GetCaretBlinkTime()); } // позволяет получить время мерцания каретки void getSystemMetrics(){ printf("\n\t- getSystemMetrics()\n"); printf("Количество кнопок мыши: %d\n", GetSystemMetrics(SM_CMOUSEBUTTONS)); } // позволяет получить количество кнопок мыши // --- Управляющие функции void showCursor(){ printf("\t- showCursor()\n"); printf ("Сейчас курсор исчезнет на 3 сек\n"); // CHAR age; // scanf("%c", &age); // sleep(1); ShowCursor(FALSE); // scanf("%c", &age); sleep(3); ShowCursor(TRUE); printf ("Курсор вернулся\n"); } // показывает и скрывает курсор void swapMouseButton(){ printf("\n\t- swapMouseButton()\n"); printf ("Сейчас на 5 секунд основные кнопки мыши поменяются местами\n"); SwapMouseButton (1); sleep(5); SwapMouseButton (0); printf ("Кнопки мыши вернулись на свои места\n"); } // позволяет поменять функции кнопок между собой void setCaretBlinkTime(){ printf("\n\t- setCaretBlinkTime()\n"); UINT blinkTime = GetCaretBlinkTime(); UINT blinkTime_old = GetCaretBlinkTime(); printf ("Сейчас на 5 секунд каретка будет мерцать быстрее\n"); SetCaretBlinkTime(blinkTime / 20); sleep(5); SetCaretBlinkTime (blinkTime_old); printf ("Каретка снова мерцает как обычно\n"); sleep(5); } // позволяет задать время мерцания каретки void setCursorPos(){ printf("\n\t- setCursorPos()\n"); printf("Сейчас курсор установится в нулевую позицию\n"); INT y = 0, x = 0; sleep(2); SetCursorPos(x,y); printf("Курсор установлен в нулевую позицию\n"); } // позволяет задать позицию курсора void systemParametersInfo(){ printf("\n\t- systemParametersInfo()\n"); PVOID mouseSpeed; PVOID mouseSpeed_new = (PVOID) 1; // Получаем информацию о настройках мыши SystemParametersInfo(SPI_GETMOUSESPEED, 0, &mouseSpeed, 0); // Проверяем результат выполнения функции printf("Текущая скорость мыши: %d\n", mouseSpeed); printf("Сейчас скорость мыши сильно уменьшится на 3 секунды\n"); sleep(1); SystemParametersInfo(SPI_SETMOUSESPEED, 0, mouseSpeed_new, 0); sleep(3); SystemParametersInfo(SPI_SETMOUSESPEED, 0, mouseSpeed, 0); printf("Скорость мыши восстановлена\n"); } // для установки скорости перемещения курсора void main() { setlocale(LC_ALL, "Rus"); printf("--------------------------------------------------"); printf("\n\t\t\t/ Информация о клавиатуре:\n"); getKeyboardType(); // + позволяет получить тип клавиатуры и количество функциональных клавиш getKeyboardState(); // + позволяет получить текущее состояние всех клавиш (клавиатуры и мыши) printf("\n--------------------------------------------"); printf("\n\t\t\t/ Информация о мыши:\n"); getCursorPos(); // + указывает положение курсора мыши getCaretBlinkTime(); // + позволяет получить время мерцания каретки getSystemMetrics(); // + позволяет получить количество кнопок мыши printf("\n----------------------------------------------"); printf("\n\t\t\t/ Управляющие функции:\n"); // showCursor(); // - показывает и скрывает курсор // swapMouseButton(); // + позволяет поменять функции кнопок между собой // setCaretBlinkTime(); // +- позволяет задать время мерцания каретки // setCursorPos(); // + позволяет задать позицию курсора // systemParametersInfo(); // + для установки скорости перемещения курсора printf("\nДля выхода нажмите Enter\n"); scanf("%c"); }