2009-11-21 4 views
4

Я собираюсь проверить, движется ли пользователь в любом окне (мое приложение не имеет интерфейса) и соответственно реагируют. Как вы думаете, как лучше всего это сделать? Могу ли я определить, нажимает ли пользователь на заголовке? Могу ли я определить, перемещается ли окно? Затем мне нужно захватить hWnd окна после того, как я знаю, что он перемещается.C# - Определить, перемещает ли пользователь окно

ответ

4

здесь есть техника для spy на ручках окон. Вы можете проверить все открытые и ожидающие сообщения перемещения.

EDIT

.NET spy code.

+0

Это гладкий инструмент, который я использовал один раз. Проект был DOA, но кто я такой, чтобы упустить возможность узнать о шпионаже над приложениями. :-) –

5

Чтобы получить уведомления о том, что все окна, а не только Windows Forms, вам необходимо использовать крючок, установленный функцией API SetWindowsHookEx(). Вам понадобится крючок WH_CALLWNDPROC, чтобы вы могли видеть сообщение WM_MOVE, которое Windows отправляет в окно.

К сожалению, это глобальный крюк. Код, который реализует обратный вызов hook, должен быть упакован в DLL, чтобы он мог быть внедрен во все целевые процессы. Это снимает дыру в ваших планах использовать C# для этого, вы не можете вводить CLR. DLL должна быть записана в неуправляемом коде.

Этот code project предлагает подход, включая неуправляемую инъекционную DLL, в которой вы нуждаетесь.