Как правильно обрабатывать комбинации клавиш в хуке клавиатуры? - C#

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

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

Подскажите пожалуйста как правильно реализовать структуру для хуков на комбинации Alt+Tab,Alt+Space,Ctrl+Alt+Delete и другие.
Листинг программы
  1. public IntPtr LowLevelKeyboardHookProc_space(int nCode, IntPtr wParam, IntPtr lParam)
  2. {
  3. if (nCode >= 0)
  4. {
  5. KBDLLHOOKSTRUCT objKeyInfo =
  6. (KBDLLHOOKSTRUCT)System.Runtime.InteropServices.Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
  7. Console.WriteLine("VirtualKeyCode {0},ScanCode {1},Flags {2},Time {3},ExtraInfo {4}, wParam {5}, ???{6},{7}", objKeyInfo.VirtualKeyCode, objKeyInfo.ScanCode, objKeyInfo.Flags, objKeyInfo.Time, objKeyInfo.ExtraInfo, wParam.ToInt32(), lParam.ToInt32() >> 31, (Keys)wParam.ToInt32());
  8. //if (objKeyInfo.VirtualKeyCode == 164 && wParam.ToInt32() == 260 && objKeyInfo.ScanCode == 56)
  9. //{
  10. // MessageBox.Show("Alt+Space");
  11. // return (IntPtr)1;
  12. //}
  13. if (objKeyInfo.VirtualKeyCode == 9 && wParam.ToInt32() == 257 && objKeyInfo.ScanCode == 15 && objKeyInfo.Flags==0)
  14. {
  15. MessageBox.Show("Alt+Tab");
  16. return (IntPtr)1;//<Alt>
  17. }
  18. }
  19. return CallNextHookEx(m_hHook_3, nCode, wParam, lParam);
  20. }
  21. [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
  22. private struct KBDLLHOOKSTRUCT //Какую тут реализовывать чтоб оно отлавливало 2 клавиши или три?
  23. {
  24. public readonly int VirtualKeyCode;
  25. public readonly int ScanCode;
  26. public readonly int Flags;
  27. public readonly int Time;
  28. public readonly IntPtr ExtraInfo;
  29. }
  30. //Using callbacks
  31. private LowLevelKeyboardProcDelegate m_callback_3;
  32.  
  33. //переменные для разблокировки клавиатуры
  34. private IntPtr m_hHook;
  35. private IntPtr m_hHook_3;
  36. //Установка перехвата клавиатуры
  37. [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
  38. private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, IntPtr hMod, int dwThreadId);
  39. //Разблокировка клавиатуры
  40. [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
  41. private static extern bool UnhookWindowsHookEx(IntPtr hhk);
  42. //Hook handle
  43. [System.Runtime.InteropServices.DllImport("Kernel32.dll", SetLastError = true)]
  44. private static extern IntPtr GetModuleHandle(IntPtr lpModuleName);
  45. //Вызов следующего хука
  46. [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
  47. private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
Я думал может реализовать очередь и записывать туда кнопки? Заранее спасибо.

Решение задачи: «Как правильно обрабатывать комбинации клавиш в хуке клавиатуры?»

textual
Листинг программы
  1. if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0)

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


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

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

13   голосов , оценка 4.231 из 5

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

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

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