Что WPF использует для захвата ввода с мыши и клавиатуры?

Я глобально (в масштабе всей системы) фильтрую определенные щелчки мыши с помощью SetWindowsHookEx и WH_MOUSE_LL . Проблема в том, что он не работает для приложений WPF (все приложения WPF обнаруживают щелчки мыши независимо от того, дал ли я указание системе игнорировать эти щелчки). Я уже задавал аналогичный вопрос здесь , но я предположил, что WPF использует DirectInput вместо стандартных сообщений Windows для обнаружения ввода. Но так ли это?

I ' Нам удалось найти код, способный вводить щелчки мыши в приложения WPF с помощью SendMessage . Если это возможно, я думаю, это каким-то образом означает, что WPF не использует DirectInput для ввода с помощью мыши. Но тогда почему нельзя запретить приложениям WPF обнаруживать щелчки мыши с помощью SetWindowsHookEx ?

Хотя этот вопрос в основном касается ввода с помощью мыши, я также хотел бы знать, как он работает для ввода с клавиатуры, поскольку ну.

Пример

Я быстро создал следующее решение для воспроизведения странного поведения WPF. Он состоит из 3-х проектов:

  • HookTester
    StartUp-проект, автоматически запускает другие 2 проекта, поэтому вам следует в основном беспокоиться об этом. Устанавливает крючок мыши при запуске, и удаляет ловушку при закрытии формы.

  • WinFormsTest
    Содержит TextBox с контекстным меню по умолчанию, где вы можете проверить правую кнопку мыши. Когда HookTester запущен, у вас не должно быть возможности вызывать контекстное меню с помощью правой кнопки мыши.

  • WpfTest
    Также содержит текстовое поле с настраиваемым контекстным меню (хотя я мог бы использовать и меню по умолчанию), так что это это снова место для проверки правой кнопки мыши. Вы не должны иметь возможность вызывать контекстное меню (используя правую кнопку мыши), пока HookTester запущен, но по какой-то причине меню все равно будет отображаться (Почему ???).

ПРЕДУПРЕЖДЕНИЕ: Когда вы запускаете решение, запускается проект HookTester, который немедленно устанавливает ловушку для отклонения любых щелчков правой кнопкой мыши (в масштабе всей системы). Вы можете легко удалить крючок, просто закрыв форму HookTester. Тестируйте с осторожностью.

Загрузить SO5036143.ZIP:[12131 impressionmirror 1 , mirror 2

16
задан Community 23 May 2017 в 12:00
поделиться