Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.10 KB | None | 0 0
  1. #include "windows.h"
  2. #include <iostream>
  3. #include <tchar.h>
  4. #include "winuser.h"
  5. #include "Source.h"
  6.  
  7. using namespace std;
  8. int option;
  9. bool t;
  10.  
  11.  
  12. int main()
  13. {
  14.     setlocale(LC_ALL, "Russian");
  15.     bool flagg = true;
  16.  
  17.  
  18.     cout << "1 - GetKeyboardType" << endl; //тип клавиатуры
  19.     cout << "2 - GetKeyboardState" << endl; //при нажатии клавиш информация
  20.     cout << "3 - GetKeyState" << endl; //нумлок скрол капс
  21.     cout << "4 - GetAsyncKeyState" << endl; //определяет, является ли клавиша отпущенной или нажатой во время вызова функции и была ли клавиша нажата после предыдущего вызова GetAsyncKeyState.
  22.     cout << "5 - GetCursorPos" << endl; //координаты мыши
  23.     cout << "6 - GetSystemMetrics" << endl; //возвращает системную метрику и системные параметры настройки конфигурации.
  24.     cout << "7 - ShowCursor" << endl; //скрыть курсор
  25.     cout << "8 - SwapMouseButton" << endl;//поменять клавиши местами мыши
  26.     cout << "9 - ClipCursor" << endl; //ограничить курсор
  27.     cout << "10 - SetCursorPos" << endl; //установить курсов
  28.     cout << "11 - SetKeyboardState" << endl;
  29.     cout << "12 - SystemParametersInfo" << endl;
  30.     cout << "13 - Выход" << endl;
  31.     cout << endl;
  32.  
  33.  
  34.     while (!t)
  35.     {
  36.  
  37.         cin >> option;
  38.  
  39.         switch (option)
  40.         {
  41.  
  42.         case 1:
  43.         {
  44.             int type, subtype, nfkeys;
  45.  
  46.             type = GetKeyboardType(0); //тип
  47.             subtype = GetKeyboardType(1); //подтип
  48.             nfkeys = GetKeyboardType(2); //количество функциональных клавиш
  49.  
  50.             cout << endl;
  51.             if (type == 1) cout << "IBM PC/XT или совместимая клавиатура (83 клавиши)" << endl;
  52.             if (type == 2) cout << "Olivetti (102 клавиши)" << endl;
  53.             if (type == 3) cout << "IBM PC/AT клавиатура (84 клавиши) или аналогичная" << endl;
  54.             if (type == 4) cout << "IBM расширенная (101 или 102 клавиши)" << endl;
  55.             if (type == 5) cout << "Nokia 1050 или аналогичная клавиатура" << endl;
  56.             if (type == 6) cout << "Nokia 9140 или аналогичная клавиатура" << endl;
  57.             if (type == 7) cout << "Японская" << endl;
  58.  
  59.             cout << "Подтип: " << subtype << endl; //Подтип является значением изготовителя(OEM-зависимая величина).
  60.             cout << nfkeys << " функциональных клавиш" << endl;
  61.         }
  62.         break;
  63.  
  64.  
  65.         case 2:
  66.         {
  67.             int temp;
  68.             BYTE arr[256];
  69.             bool t = true;
  70.             while (t)
  71.             {
  72.                 memset(arr, 0, sizeof(256)); //Функция memset заполняет num байтов блока памяти
  73.                 GetKeyState(0);
  74.                 /*GetKeyState извлекает данные о состоянии заданной виртуальной клавиши.
  75.                 Состояние определяет, является ли клавиша нажатой, не нажатой или переключенной
  76.                 (вкл., выкл. - чередуется, каждый раз, когда нажимается клавиша).*/
  77.  
  78.                 GetKeyboardState(arr); //функция копирует состояние 256 виртуальных клавиш в заданный буфер.
  79.                
  80.                     for (int i = 0; i < 256; i++)
  81.                     {
  82.                         temp = (int)arr[i];
  83.                         temp >>= 7; //цикличиский сдвиг вправо на 7 бит
  84.                         cout << temp;
  85.                     }
  86.  
  87.                     cout << endl;
  88.                     Sleep(1500);
  89.                 }
  90.            
  91.         }
  92.         break;
  93.  
  94.  
  95.         case 3:
  96.         {
  97.             if (GetKeyState(VK_NUMLOCK) == 1) cout << "Num Lock включён" << endl; else cout << "Num Lock выключен" << endl;
  98.             if (GetKeyState(VK_SCROLL) == 1) cout << "Scroll Lock включён" << endl; else cout << "Scroll Lock выключен" << endl;
  99.             if (GetKeyState(VK_CAPITAL) == 1) cout << "Caps Lock включён" << endl; else cout << "Caps Lock выключен" << endl;
  100.         }
  101.         break;
  102.  
  103.  
  104.         case 4:
  105.         {
  106.             /*Состояние клавиши, возвращенное этой функцией, изменяется, так как данный поток читает
  107.          клавишные сообщения из ее очереди сообщений. Состояние клавиши не отражает состояния уровня
  108.          прерывания, связанное с аппаратными средствами. Используйте функцию GetAsyncKeyState, чтобы
  109.          получить эту информацию.*/
  110.          //другими словами коды клавиш которые были отжаты
  111.  
  112.             for (int i = 0; i < 256; i++)
  113.             {
  114.                 cout << GetAsyncKeyState(i);
  115.             }
  116.             cout << endl;
  117.         }
  118.         break;
  119.  
  120.  
  121.         case 5:
  122.         {
  123.             POINT point;
  124.             if (GetCursorPos(&point))
  125.             {
  126.                 cout << "X: " << point.x << endl;
  127.                 cout << "Y: " << point.y << endl;
  128.             }
  129.         }
  130.         break;
  131.  
  132.  
  133.  
  134.         case 6:
  135.         {
  136. #pragma region список
  137.             /*Имя константы Описание
  138. SM_CXBORDER Ширина рамки для окна, размеры которого нельзя изменять
  139. SM_CXCURSOR Ширина курсора
  140. SM_CXDLGFRAME   Ширина рамки окна, имеющего стиль WS_DLGFRAME
  141. SM_CXDOUBLECLK  Ширина прямоугольника, внутри которого должны быть сделаны два щелчка мышью, для того чтобы они могли распознаваться как один двойной щелчок (double click). Эта константа определена только для Windows версии 3.1
  142. SM_CXFRAME  Ширина рамки для окна, размеры которого можно изменять
  143. SM_CXFULLSCREEN Ширина внутренней поверхности окна, увеличенного до предела (maximised)
  144. SM_CXHSCROLL    Ширина битового образа стрелки горизонтальной полосы просмотра
  145. SM_CXHTHUMB Ширина ползунка горизонтальной полосы просмотра
  146. SM_CXICON   Ширина пиктограммы
  147. SM_CXICONSPACING    Ширина прямоугольника, используемого для расположения пиктограммы с заголовком. Эта константа определена только для Windows версии 3.1
  148. SM_CXMIN    Минимальная ширина окна
  149. SM_CXMINTRACK   Минимальная ширина окна, которая может быть установлена при помощи мыши (Minimum tracking width of a window)
  150. SM_CXSCREEN Ширина экрана
  151. SM_CXSIZE   Ширина полосы битового образа (bitmap) заголовка окна (title bar)
  152. SM_CXVSCROLL    Ширина битового образа стрелки вертикальной полосы просмотра
  153. SM_CYBORDER Высота рамки для окна, размеры которого нельзя изменять
  154. SM_CYCAPTION    Высота заголовка окна
  155. SM_CYCURSOR Высота курсора
  156. SM_CYDLGFRAME   Высота рамки окна, имеющего стиль WS_DLGFRAME
  157. SM_CYDOUBLECLK  Высота прямоугольника, внутри которого должны быть сделаны два щелчка мышью, для того чтобы они могли распознаваться как один двойной щелчок (double click). Эта константа определена только для Windows версии 3.1
  158. SM_CYFRAME  Высота рамки для окна, размеры которого можно изменять
  159. SM_CYFULLSCREEN Высота внутренней поверхности окна, увеличенного до предела (maximised)
  160. SM_CYHSCROLL    Высота битового образа стрелки горизонтальной полосы просмотра
  161. SM_CYICON   Высота пиктограммы
  162. SM_CYICONSPACING    Высота прямоугольника, используемого для расположения пиктограммы с заголовком. Эта константа определена только для Windows версии 3.1
  163. SM_CYKANJIWINDOW    Высота окна Kanji
  164. SM_CYMENU   Высота одной строки в полосе меню
  165. SM_CYMIN    Минимальная высота окна
  166. SM_CYMINTRACK   Минимальная высота окна, которая может быть установлена при помощи мыши (Minimum tracking width of a window)
  167. SM_CYSCREEN Высота экрана
  168. SM_CYSIZE   Высота полосы битового образа заголовка окна
  169. SM_CYVSCROLL    Высота битового образа стрелки вертикальной полосы просмотра
  170. SM_CYVTHUMB Высота ползунка горизонтальной полосы просмотра
  171. SM_DBCSENABLED  Флаг использования символов, состоящих из двух байт (используется в тех языках, где для представления всех символов не хватает 8-разрядной сетки). Эта константа определена только для Windows версии 3.1
  172. SM_DEBUG    Флаг отладочной версии Windows. Он не равен нулю, если работает отладочная версия Windows (поставляется вместе с Microsoft SDK или Microsoft Visual C++)
  173. SM_MENUDROPALIGNMENT    Флаг типа выравнивания временного меню (pop-up menu). Если флаг равен нулю, левая сторона меню выравнена по левой стороне соответствующего элемента строки меню. В противном случае левая сторона меню выравнена по правой стороне соответствующего элемента строки меню. Эта константа определена только для Windows версии 3.1
  174. SM_MOUSEPRESENT Флаг не равен нулю, если компьютер оборудован мышью
  175. SM_PENWINDOWS   Идентификатор библиотеки динамической загрузки DLL Pen Windows или 0, если Pen Windows не используется. Эта константа определена только для Windows версии 3.1
  176. SM_SWAPBUTTON   Если флаг не равен нулю, действия левой и правой клавиши мыши поменялись местами, то есть вместо левой клавиши используется правая и наоборот, вместо правой - левая*/
  177. #pragma endregion
  178.             cout << GetSystemMetrics(SM_CYSCREEN) << endl; // Высота экрана
  179.             cout << GetSystemMetrics(SM_CXSCREEN) << endl; // ширина
  180.             cout << GetSystemMetrics(SM_CYCURSOR) << endl; //Высота курсора
  181.         }
  182.         break;
  183.  
  184.  
  185.  
  186.  
  187.         case 7:
  188.         {
  189.             /*
  190.             POINT p;
  191.             int x, y;
  192.             GetCursorPos(&p);
  193.             cout << ShowCursor(true) << " - мышь скрыта" << endl;
  194.             SetCursorPos(500, 5000);
  195.             Sleep(3000);
  196.             cout << ShowCursor(false) << " - мышь видна" << endl;
  197.             x = p.x;
  198.             y = p.y;
  199.             SetCursorPos(x, y);
  200.             */
  201.  
  202.             ShowCursor(FALSE);
  203.             Sleep(3000);
  204.             ShowCursor(TRUE);
  205.  
  206.  
  207.         }
  208.         break;
  209.  
  210.  
  211.  
  212.         case 8:
  213.         {
  214.             SwapMouseButton(true);
  215.             Sleep(10000);
  216.             SwapMouseButton(false);
  217.         }
  218.         break;
  219.  
  220.  
  221.  
  222.         case 9:
  223.         {
  224.             RECT r1;
  225.             RECT r2;
  226.             if (GetClipCursor(&r1)) //Функция GetClipCursor извлекает информацию об экранных
  227.                 //координатах прямоугольной области, в которой ограничен курсор.
  228.             {
  229.                 SetRect(&r2, 1, 1, 50, 50); //лево верх право низ
  230.                 if (ClipCursor(&r2)) //ограничиваем его
  231.                 {
  232.                     cout << "Курсор ограничен" << endl;
  233.                     Sleep(5000);
  234.                     cout << "Курсор освобождён" << endl;
  235.                     ClipCursor(&r1);
  236.                 }
  237.             }
  238.         }
  239.         break;
  240.  
  241.  
  242.  
  243.         case 10:
  244.         {
  245.             int x, y;
  246.             cout << "X: "; cin >> x;
  247.             cout << "Y: "; cin >> y;
  248.             SetCursorPos(x, y);
  249.         }
  250.         break;
  251.  
  252.  
  253.  
  254.  
  255.         case 11:
  256.         {
  257.             /*Функция SetKeyboardState копирует 256-байтовый массив состояний клавиш клавиатуры в таблицу
  258.             состояния ввода информации с клавиатуры вызывающего потока. Это - та же самая таблица, к которой
  259.             обращаются функции GetKeyboardState и GetKeyState. Изменения, сделанные в этой таблице, не воздействуют
  260.             на ввод информации с клавиатуры любого другого потока.*/
  261.  
  262.            
  263.             int temp;
  264.             BYTE arr[256];
  265.             bool t = true;
  266.  
  267.             while (t)
  268.             {  
  269.                 memset(arr, 0, 256); //Функция memset заполняет num байтов блока памяти
  270.                
  271.                 /*GetKeyState извлекает данные о состоянии заданной виртуальной клавиши.
  272.                 Состояние определяет, является ли клавиша нажатой, не нажатой или переключенной
  273.                 (вкл., выкл. - чередуется, каждый раз, когда нажимается клавиша).*/
  274.                 SetKeyboardState(arr);
  275.                 /*Функции SetKeyboardState предаётся массив длиной 256 байт
  276.                 который описывает состояние виртуальных клавиш (нажата или не нажата),
  277.                 при вызове функции она копирует этот массив в input-state table текущего потока.
  278.                 Через GetKeyboardState этот массив можно получить.*/
  279.                 //GetKeyboardState(arr);
  280.                 GetKeyState(0);
  281.                
  282.  
  283.                 for (int i = 0; i < 256; i++)
  284.                 {
  285.                     temp = (int)arr[i];
  286.                    
  287.                     temp >>= 7; //цикличиский сдвиг вправо на 7 бит
  288.                     cout << temp;
  289.                 }
  290.  
  291.                 cout << endl;
  292.                 Sleep(1500);
  293.    
  294.  
  295.             }
  296.  
  297.  
  298.             }  
  299.             break;
  300.  
  301.  
  302.  
  303.  
  304.  
  305.         case 12:
  306.         {
  307.  
  308.         DWORD t;
  309.         SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &t, 0);
  310.         cout << t << " ms" << endl;
  311.  
  312.          /*Получает время в миллисекундах, которое система ждет перед
  313.          отображением контекстного меню, когда курсор мыши находится над
  314.          элементом подменю. Параметр pvParam должен указывать на переменную DWORD,
  315.          которая получает время задержки.*/
  316.  
  317.         }
  318.         break;
  319.  
  320.  
  321.  
  322.  
  323.         case 13:
  324.         {
  325.             t = true;;
  326.         }
  327.         break;
  328.  
  329.         }
  330.         }
  331.  
  332.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement