Как обнаружить неактивность пользователя в моем приложении (Windows Mobile, C #) - PullRequest
2 голосов
/ 23 февраля 2010

Нам нужно записать, сколько времени пользователь может провести в наборе форм. Основная задача - определить, взаимодействует ли пользователь с приложением. До сих пор я нашел эту ссылку (http://blog.opennetcf.com/ctacke/2009/05/19/DetectingApplicationIdle.aspx) предоставил идеальное решение, но наша компания очень консервативна в отношении библиотек с открытым исходным кодом / сторонних производителей. (Я знал, что установка фильтра сообщений на уровне формы - это еще один вариант, но он может существующее приложение излишне сложное. В идеале я хочу установить фильтр сообщений на уровне приложения.)

Заранее спасибо за любую идею или решение.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

На самом деле не существует простого способа использования только встроенных функций CF. Вам нужно просмотреть все сообщения для вашего приложения, и реализация IMessageFilter, как описано в этой записи блога (включена через SDF, так как CF не поддерживает их), является самым простым способом добраться туда.

Вы всегда можете сделать то же самое, что делает SDF, создав собственный насос сообщений (с помощью P / Invoking GetMessage, TranslateMessage и DispatchMessage) и затем не используя Application.Run, а свой собственный вызов. Это все, что SDF делает в любом случае.

0 голосов
/ 24 февраля 2010

Windows Mobile устанавливает именованное событие, когда пользователь взаимодействует с системой. Название события хранится в: HKLM\System\GWE\ActivityEvent. Вы можете настроить поток так, чтобы он ожидал оповещения об этом именованном событии и выяснил, активна ли ваша форма, когда событие было инициировано. Вы можете использовать GetForegroundWindow , чтобы определить, было ли у вашего окна фокус, когда было установлено событие.

Другая возможность состоит в создании подклассов ваших форм с использованием GetWindowLong и SetWindowLong . Это приведет к тому, что все сообщения, полученные вашей формой, будут переданы новой функции WndProc. Вы можете проверить сообщения активности (WM_LBUTTONDOWN, WM_LBUTTONUP, WM_COMMAND и т. Д.) В функции WndProc, а затем передать сообщения обратно в исходный WndProc с помощью функции CallWndProc.

...