Проверка на нажатие клавиши - C#
Формулировка задачи:
Как проверить нажата ли клавиша в чужой программе? Знаю, что нужно использовать WinApi функции, но какие? Никак не могу найти
Решение задачи: «Проверка на нажатие клавиши»
textual
Листинг программы
static class Hook { [DllImport("user32.dll")] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevel_KeyboardProc Ipfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll")] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); private static IntPtr _hookId = IntPtr.Zero; private delegate IntPtr LowLevel_KeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); private static LowLevel_KeyboardProc _proc = HookCallback; private const int WH_KEYBOARD_LL = 13; private const int WH_KEYDOWN = 0x0100; [DllImport("Kernel32.dll")] private static extern IntPtr GetModuleHandle(string lpModuleName); private static IntPtr SetHook(LowLevel_KeyboardProc proc) { Process pr = Process.GetCurrentProcess(); ProcessModule prM = pr.MainModule; return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(prM.ModuleName), 0); } private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WH_KEYDOWN) { int vkCode = Marshal.ReadInt32(lParam); InputLanguage inlen = InputLanguage.CurrentInputLanguage; if (inlen.LayoutName == "Русская") { lb.Items.Add(GetRuSymbol(vkCode)); } else { lb.Items.Add((Keys)vkCode); } } return CallNextHookEx(_hookId, nCode, wParam, lParam); } public static void StartHook() { _hookId = SetHook(_proc); } public static void StopHook() { UnhookWindowsHookEx(_hookId); } public static ListBox lb; private static string GetRuSymbol(int code) { switch (code) { case 81: return "Й"; case 87: return "Ц"; case 69: return "У"; case 82: return "К"; case 84: return "Е"; case 89: return "Н"; case 85: return "Г"; case 73: return "Ш"; case 79: return "Щ"; case 80: return "З"; case 219: return "Х"; case 221: return "Ъ"; case 65: return "Ф"; case 83: return "Ы"; case 68: return "В"; case 70: return "А"; case 71: return "П"; case 72: return "Р"; case 74: return "О"; case 75: return "Л"; case 76: return "Д"; case 186: return "Ж"; case 222: return "Э"; case 90: return "Я"; case 88: return "Ч"; case 67: return "С"; case 86: return "М"; case 66: return "И"; case 78: return "Т"; case 77: return "Ь"; case 188: return "Б"; case 190: return "Ю"; case 192: return "Ё"; default: Keys inp = (Keys)(code); return inp.ToString(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д