Viper029
@Viper029
Программирую за печенье

Как в C# настроить hook на сочетание клавиш[Решено]?

Есть программа. Хуком ловит клавишу и выполняет определенное действие. Но ловит она только одну клавишу. А хотелось бы настроить на сочетание клавиш. Помогите, люди добрые. :)

Код хука:
public class Hook : IDisposable
    {
        #region Declare WinAPI functions
        [DllImport("kernel32.dll")]
        private static extern IntPtr LoadLibrary(string lpFileName);

        [DllImport("user32.dll")]
        private static extern IntPtr SetWindowsHookEx(int idHook, KeyboardHookProc callback, IntPtr hInstance, uint threadId);
        [DllImport("user32.dll")]
        private static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);
        [DllImport("user32.dll")]
        private static extern bool UnhookWindowsHookEx(IntPtr hInstance);
        #endregion
        #region Constants
        private const int WH_KEYBOARD_LL = 13;
        private const int WH_KEYDOWN = 0x0100;
        #endregion

        // код клавиши на которую ставим хук
        private int _key;
        public event KeyPressEventHandler KeyPressed;

        private delegate IntPtr KeyboardHookProc(int code, IntPtr wParam, IntPtr lParam);
        private KeyboardHookProc _proc;
        private IntPtr _hHook = IntPtr.Zero;

        public Hook(int keyCode)
        {
            _key = keyCode;
            _proc = HookProc;
        }

        public void SetHook()
        {
            var hInstance = LoadLibrary("User32");
            _hHook = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, hInstance, 0);
        }

        public void Dispose()
        {
            UnHook();
        }

        public void UnHook()
        {
            UnhookWindowsHookEx(_hHook);
        }

        private IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam)
        {
            if ((code >= 0 && wParam == (IntPtr)WH_KEYDOWN) && Marshal.ReadInt32(lParam) == _key)
            {

                // бросаем событие
                if (KeyPressed != null)
                {
                    KeyPressed(this, new KeyPressEventArgs(Convert.ToChar(code)));
                }
            }

            // пробрасываем хук дальше
            return CallNextHookEx(_hHook, code, (int)wParam, lParam);
        }
    }


Его обработка:
// 0x70 клавиша F1
            _hook_F1 = new Hook(0x70);
            _hook_F1.KeyPressed += new KeyPressEventHandler(_hook_F1_KeyPressed);
            _hook_F1.SetHook();

void _hook_F1_KeyPressed(object sender, KeyPressEventArgs e) //Событие нажатия клавиш
        {
         //Нужное мне событие
        }
  • Вопрос задан
  • 2998 просмотров
Решения вопроса 1
Viper029
@Viper029 Автор вопроса
Программирую за печенье
UPD: Разобрался сам. Нужно при обработке HookProc сравнивать wParam с 257(сочетание с Ctrl) или 261(сочетание с Alt)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Den3961
помогите мне....
-----UPD: Разобрался сам. Нужно при обработке HookProc сравнивать wParam с 257(сочетание с Ctrl) или 261(сочетание с Alt)---- вот это куда писать и что помимо этого менять?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы