Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "windows.h"
- #include <iostream>
- #include <tchar.h>
- #include "winuser.h"
- #include "Source.h"
- using namespace std;
- int option;
- bool t;
- int main()
- {
- setlocale(LC_ALL, "Russian");
- bool flagg = true;
- cout << "1 - GetKeyboardType" << endl; //тип клавиатуры
- cout << "2 - GetKeyboardState" << endl; //при нажатии клавиш информация
- cout << "3 - GetKeyState" << endl; //нумлок скрол капс
- cout << "4 - GetAsyncKeyState" << endl; //определяет, является ли клавиша отпущенной или нажатой во время вызова функции и была ли клавиша нажата после предыдущего вызова GetAsyncKeyState.
- cout << "5 - GetCursorPos" << endl; //координаты мыши
- cout << "6 - GetSystemMetrics" << endl; //возвращает системную метрику и системные параметры настройки конфигурации.
- cout << "7 - ShowCursor" << endl; //скрыть курсор
- cout << "8 - SwapMouseButton" << endl;//поменять клавиши местами мыши
- cout << "9 - ClipCursor" << endl; //ограничить курсор
- cout << "10 - SetCursorPos" << endl; //установить курсов
- cout << "11 - SetKeyboardState" << endl;
- cout << "12 - SystemParametersInfo" << endl;
- cout << "13 - Выход" << endl;
- cout << endl;
- while (!t)
- {
- cin >> option;
- switch (option)
- {
- case 1:
- {
- int type, subtype, nfkeys;
- type = GetKeyboardType(0); //тип
- subtype = GetKeyboardType(1); //подтип
- nfkeys = GetKeyboardType(2); //количество функциональных клавиш
- cout << endl;
- if (type == 1) cout << "IBM PC/XT или совместимая клавиатура (83 клавиши)" << endl;
- if (type == 2) cout << "Olivetti (102 клавиши)" << endl;
- if (type == 3) cout << "IBM PC/AT клавиатура (84 клавиши) или аналогичная" << endl;
- if (type == 4) cout << "IBM расширенная (101 или 102 клавиши)" << endl;
- if (type == 5) cout << "Nokia 1050 или аналогичная клавиатура" << endl;
- if (type == 6) cout << "Nokia 9140 или аналогичная клавиатура" << endl;
- if (type == 7) cout << "Японская" << endl;
- cout << "Подтип: " << subtype << endl; //Подтип является значением изготовителя(OEM-зависимая величина).
- cout << nfkeys << " функциональных клавиш" << endl;
- }
- break;
- case 2:
- {
- int temp;
- BYTE arr[256];
- bool t = true;
- while (t)
- {
- memset(arr, 0, sizeof(256)); //Функция memset заполняет num байтов блока памяти
- GetKeyState(0);
- /*GetKeyState извлекает данные о состоянии заданной виртуальной клавиши.
- Состояние определяет, является ли клавиша нажатой, не нажатой или переключенной
- (вкл., выкл. - чередуется, каждый раз, когда нажимается клавиша).*/
- GetKeyboardState(arr); //функция копирует состояние 256 виртуальных клавиш в заданный буфер.
- for (int i = 0; i < 256; i++)
- {
- temp = (int)arr[i];
- temp >>= 7; //цикличиский сдвиг вправо на 7 бит
- cout << temp;
- }
- cout << endl;
- Sleep(1500);
- }
- }
- break;
- case 3:
- {
- if (GetKeyState(VK_NUMLOCK) == 1) cout << "Num Lock включён" << endl; else cout << "Num Lock выключен" << endl;
- if (GetKeyState(VK_SCROLL) == 1) cout << "Scroll Lock включён" << endl; else cout << "Scroll Lock выключен" << endl;
- if (GetKeyState(VK_CAPITAL) == 1) cout << "Caps Lock включён" << endl; else cout << "Caps Lock выключен" << endl;
- }
- break;
- case 4:
- {
- /*Состояние клавиши, возвращенное этой функцией, изменяется, так как данный поток читает
- клавишные сообщения из ее очереди сообщений. Состояние клавиши не отражает состояния уровня
- прерывания, связанное с аппаратными средствами. Используйте функцию GetAsyncKeyState, чтобы
- получить эту информацию.*/
- //другими словами коды клавиш которые были отжаты
- for (int i = 0; i < 256; i++)
- {
- cout << GetAsyncKeyState(i);
- }
- cout << endl;
- }
- break;
- case 5:
- {
- POINT point;
- if (GetCursorPos(&point))
- {
- cout << "X: " << point.x << endl;
- cout << "Y: " << point.y << endl;
- }
- }
- break;
- case 6:
- {
- #pragma region список
- /*Имя константы Описание
- SM_CXBORDER Ширина рамки для окна, размеры которого нельзя изменять
- SM_CXCURSOR Ширина курсора
- SM_CXDLGFRAME Ширина рамки окна, имеющего стиль WS_DLGFRAME
- SM_CXDOUBLECLK Ширина прямоугольника, внутри которого должны быть сделаны два щелчка мышью, для того чтобы они могли распознаваться как один двойной щелчок (double click). Эта константа определена только для Windows версии 3.1
- SM_CXFRAME Ширина рамки для окна, размеры которого можно изменять
- SM_CXFULLSCREEN Ширина внутренней поверхности окна, увеличенного до предела (maximised)
- SM_CXHSCROLL Ширина битового образа стрелки горизонтальной полосы просмотра
- SM_CXHTHUMB Ширина ползунка горизонтальной полосы просмотра
- SM_CXICON Ширина пиктограммы
- SM_CXICONSPACING Ширина прямоугольника, используемого для расположения пиктограммы с заголовком. Эта константа определена только для Windows версии 3.1
- SM_CXMIN Минимальная ширина окна
- SM_CXMINTRACK Минимальная ширина окна, которая может быть установлена при помощи мыши (Minimum tracking width of a window)
- SM_CXSCREEN Ширина экрана
- SM_CXSIZE Ширина полосы битового образа (bitmap) заголовка окна (title bar)
- SM_CXVSCROLL Ширина битового образа стрелки вертикальной полосы просмотра
- SM_CYBORDER Высота рамки для окна, размеры которого нельзя изменять
- SM_CYCAPTION Высота заголовка окна
- SM_CYCURSOR Высота курсора
- SM_CYDLGFRAME Высота рамки окна, имеющего стиль WS_DLGFRAME
- SM_CYDOUBLECLK Высота прямоугольника, внутри которого должны быть сделаны два щелчка мышью, для того чтобы они могли распознаваться как один двойной щелчок (double click). Эта константа определена только для Windows версии 3.1
- SM_CYFRAME Высота рамки для окна, размеры которого можно изменять
- SM_CYFULLSCREEN Высота внутренней поверхности окна, увеличенного до предела (maximised)
- SM_CYHSCROLL Высота битового образа стрелки горизонтальной полосы просмотра
- SM_CYICON Высота пиктограммы
- SM_CYICONSPACING Высота прямоугольника, используемого для расположения пиктограммы с заголовком. Эта константа определена только для Windows версии 3.1
- SM_CYKANJIWINDOW Высота окна Kanji
- SM_CYMENU Высота одной строки в полосе меню
- SM_CYMIN Минимальная высота окна
- SM_CYMINTRACK Минимальная высота окна, которая может быть установлена при помощи мыши (Minimum tracking width of a window)
- SM_CYSCREEN Высота экрана
- SM_CYSIZE Высота полосы битового образа заголовка окна
- SM_CYVSCROLL Высота битового образа стрелки вертикальной полосы просмотра
- SM_CYVTHUMB Высота ползунка горизонтальной полосы просмотра
- SM_DBCSENABLED Флаг использования символов, состоящих из двух байт (используется в тех языках, где для представления всех символов не хватает 8-разрядной сетки). Эта константа определена только для Windows версии 3.1
- SM_DEBUG Флаг отладочной версии Windows. Он не равен нулю, если работает отладочная версия Windows (поставляется вместе с Microsoft SDK или Microsoft Visual C++)
- SM_MENUDROPALIGNMENT Флаг типа выравнивания временного меню (pop-up menu). Если флаг равен нулю, левая сторона меню выравнена по левой стороне соответствующего элемента строки меню. В противном случае левая сторона меню выравнена по правой стороне соответствующего элемента строки меню. Эта константа определена только для Windows версии 3.1
- SM_MOUSEPRESENT Флаг не равен нулю, если компьютер оборудован мышью
- SM_PENWINDOWS Идентификатор библиотеки динамической загрузки DLL Pen Windows или 0, если Pen Windows не используется. Эта константа определена только для Windows версии 3.1
- SM_SWAPBUTTON Если флаг не равен нулю, действия левой и правой клавиши мыши поменялись местами, то есть вместо левой клавиши используется правая и наоборот, вместо правой - левая*/
- #pragma endregion
- cout << GetSystemMetrics(SM_CYSCREEN) << endl; // Высота экрана
- cout << GetSystemMetrics(SM_CXSCREEN) << endl; // ширина
- cout << GetSystemMetrics(SM_CYCURSOR) << endl; //Высота курсора
- }
- break;
- case 7:
- {
- /*
- POINT p;
- int x, y;
- GetCursorPos(&p);
- cout << ShowCursor(true) << " - мышь скрыта" << endl;
- SetCursorPos(500, 5000);
- Sleep(3000);
- cout << ShowCursor(false) << " - мышь видна" << endl;
- x = p.x;
- y = p.y;
- SetCursorPos(x, y);
- */
- ShowCursor(FALSE);
- Sleep(3000);
- ShowCursor(TRUE);
- }
- break;
- case 8:
- {
- SwapMouseButton(true);
- Sleep(10000);
- SwapMouseButton(false);
- }
- break;
- case 9:
- {
- RECT r1;
- RECT r2;
- if (GetClipCursor(&r1)) //Функция GetClipCursor извлекает информацию об экранных
- //координатах прямоугольной области, в которой ограничен курсор.
- {
- SetRect(&r2, 1, 1, 50, 50); //лево верх право низ
- if (ClipCursor(&r2)) //ограничиваем его
- {
- cout << "Курсор ограничен" << endl;
- Sleep(5000);
- cout << "Курсор освобождён" << endl;
- ClipCursor(&r1);
- }
- }
- }
- break;
- case 10:
- {
- int x, y;
- cout << "X: "; cin >> x;
- cout << "Y: "; cin >> y;
- SetCursorPos(x, y);
- }
- break;
- case 11:
- {
- /*Функция SetKeyboardState копирует 256-байтовый массив состояний клавиш клавиатуры в таблицу
- состояния ввода информации с клавиатуры вызывающего потока. Это - та же самая таблица, к которой
- обращаются функции GetKeyboardState и GetKeyState. Изменения, сделанные в этой таблице, не воздействуют
- на ввод информации с клавиатуры любого другого потока.*/
- int temp;
- BYTE arr[256];
- bool t = true;
- while (t)
- {
- memset(arr, 0, 256); //Функция memset заполняет num байтов блока памяти
- /*GetKeyState извлекает данные о состоянии заданной виртуальной клавиши.
- Состояние определяет, является ли клавиша нажатой, не нажатой или переключенной
- (вкл., выкл. - чередуется, каждый раз, когда нажимается клавиша).*/
- SetKeyboardState(arr);
- /*Функции SetKeyboardState предаётся массив длиной 256 байт
- который описывает состояние виртуальных клавиш (нажата или не нажата),
- при вызове функции она копирует этот массив в input-state table текущего потока.
- Через GetKeyboardState этот массив можно получить.*/
- //GetKeyboardState(arr);
- GetKeyState(0);
- for (int i = 0; i < 256; i++)
- {
- temp = (int)arr[i];
- temp >>= 7; //цикличиский сдвиг вправо на 7 бит
- cout << temp;
- }
- cout << endl;
- Sleep(1500);
- }
- }
- break;
- case 12:
- {
- DWORD t;
- SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &t, 0);
- cout << t << " ms" << endl;
- /*Получает время в миллисекундах, которое система ждет перед
- отображением контекстного меню, когда курсор мыши находится над
- элементом подменю. Параметр pvParam должен указывать на переменную DWORD,
- которая получает время задержки.*/
- }
- break;
- case 13:
- {
- t = true;;
- }
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement