Проверка на нажатие клавиши - 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д