Захват событий мыши/клавиатуры вне формы (приложение работает в фоновом режиме)

У меня есть приложение, которое работает в фоновом режиме (сведено к минимуму/лоток для задач). Мне нужно иметь возможность обнаруживать активность мыши (клики, перемещение), а также активность клавиатуры.

Каков наилучший способ сделать это, учитывая ограничение, что мое окно не "сфокусировано"?

Ответ 1

Волшебные слова - это крючки окон. Они создаются с вызовом p/invoke для SetWindowsHookEx. Вы можете настроить крючок для мониторинга, в частности, событий клавиатуры и мыши. Обычно такие привязки являются локальными для приложения, но вы также можете создавать глобальные перехватчики. Microsoft KB показывает, как.

Однако имейте в виду, что не все типы глобальных перехватчиков могут использоваться из .NET. В частности, есть только два, которые вы можете использовать: низкоуровневые клавиатурные и мышиные крючки, известные как WH_KEYBOARD_LL и WH_MOUSE_LL. К счастью, это именно то, что вам нужно.

Ответ 2

Взгляните на эту библиотеку http://globalmousekeyhook.codeplex.com/. Это 100% -ный код С# для установки глобальных мышц и клавиатурных крючков. Он обертывает крючки низкого уровня в обычные формы окон клавиатуры и мыши.