Проверка на нажатие клавиши - C#

Узнай цену своей работы

Формулировка задачи:

Как проверить нажата ли клавиша в чужой программе? Знаю, что нужно использовать WinApi функции, но какие? Никак не могу найти

Решение задачи: «Проверка на нажатие клавиши»

textual
Листинг программы
  1. static class Hook
  2.     {
  3.         [DllImport("user32.dll")]
  4.         private static extern IntPtr SetWindowsHookEx(int idHook, LowLevel_KeyboardProc Ipfn, IntPtr hMod, uint dwThreadId);
  5.  
  6.         [DllImport("user32.dll")]
  7.         private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
  8.         [DllImport("user32.dll")]
  9.         [return: MarshalAs(UnmanagedType.Bool)]
  10.         private static extern bool UnhookWindowsHookEx(IntPtr hhk);
  11.  
  12.         private static IntPtr _hookId = IntPtr.Zero;
  13.         private delegate IntPtr LowLevel_KeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
  14.         private static LowLevel_KeyboardProc _proc = HookCallback;
  15.         private const int WH_KEYBOARD_LL = 13;
  16.         private const int WH_KEYDOWN = 0x0100;
  17.  
  18.         [DllImport("Kernel32.dll")]
  19.         private static extern IntPtr GetModuleHandle(string lpModuleName);
  20.  
  21.         private static IntPtr SetHook(LowLevel_KeyboardProc proc)
  22.         {
  23.             Process pr = Process.GetCurrentProcess();
  24.             ProcessModule prM = pr.MainModule;
  25.             return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(prM.ModuleName), 0);
  26.         }
  27.         private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
  28.         {
  29.             if (nCode >= 0 && wParam == (IntPtr)WH_KEYDOWN)
  30.             {
  31.                 int vkCode = Marshal.ReadInt32(lParam);
  32.                 InputLanguage inlen = InputLanguage.CurrentInputLanguage;
  33.                 if (inlen.LayoutName == "Русская")
  34.                 {
  35.                     lb.Items.Add(GetRuSymbol(vkCode));
  36.                 }
  37.                 else
  38.                 {
  39.                     lb.Items.Add((Keys)vkCode);
  40.                 }
  41.  
  42.             }
  43.             return CallNextHookEx(_hookId, nCode, wParam, lParam);
  44.         }
  45.         public static void StartHook()
  46.         {
  47.             _hookId = SetHook(_proc);
  48.         }
  49.         public static void StopHook()
  50.         {
  51.             UnhookWindowsHookEx(_hookId);
  52.         }
  53.         public static ListBox lb;
  54.         private static string GetRuSymbol(int code)
  55.         {
  56.             switch (code)
  57.             {
  58.                 case 81: return "Й";
  59.                 case 87: return "Ц";
  60.                 case 69: return "У";
  61.                 case 82: return "К";
  62.                 case 84: return "Е";
  63.                 case 89: return "Н";
  64.                 case 85: return "Г";
  65.                 case 73: return "Ш";
  66.                 case 79: return "Щ";
  67.                 case 80: return "З";
  68.                 case 219: return "Х";
  69.                 case 221: return "Ъ";
  70.                 case 65: return "Ф";
  71.                 case 83: return "Ы";
  72.                 case 68: return "В";
  73.                 case 70: return "А";
  74.                 case 71: return "П";
  75.                 case 72: return "Р";
  76.                 case 74: return "О";
  77.                 case 75: return "Л";
  78.                 case 76: return "Д";
  79.                 case 186: return "Ж";
  80.                 case 222: return "Э";
  81.                 case 90: return "Я";
  82.                 case 88: return "Ч";
  83.                 case 67: return "С";
  84.                 case 86: return "М";
  85.                 case 66: return "И";
  86.                 case 78: return "Т";
  87.                 case 77: return "Ь";
  88.                 case 188: return "Б";
  89.                 case 190: return "Ю";
  90.                 case 192: return "Ё";
  91.                 default: Keys inp = (Keys)(code); return inp.ToString();
  92.  
  93.             }
  94.         }
  95.  
  96.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы