Compact Framework - функция тайм-аута для блокировки пользовательского интерфейса после периода бездействия - PullRequest
2 голосов
/ 08 декабря 2008

Доброе утро,

Я разработчик приложения для КПК среднего размера, которое будет использоваться на улицах. КПК будет содержать некоторые неопределенно важные данные (имена и адреса и т. Д.). Шифрование в мобильной базе данных уже обработано, однако, если кто-то завладеет КПК, когда он вошел в систему, он может с радостью просматривать данные до тех пор, пока не разрядится батарея, или они закрыли приложение и должны были снова войти в систему.

Когда пользователи получают доступ к приложению для КПК, им нужно ввести свое имя пользователя и ПИН-код. В версии 1 этого программного обеспечения событие было подключено к каждой кнопке в системе, поэтому при нажатии кнопки она обновляла переменную с именем LastActionTime. В основной форме запускался таймер, и если это LastActionTime было более 10 минут назад, то система снова выдает форму входа, пока предыдущий пользователь / администратор снова не войдет в систему (как экран блокировки Windows).

Это работало нормально ... в некотором смысле ... проблема в том, что он обрабатывал только кнопки и не обрабатывал другие элементы управления, такие как ListViews, PictureBoxes и т. Д.

Есть ли хороший способ добиться этого? Например, есть ли способ расширить класс форм Windows для обработки каждого отдельного события и соответствующим образом обновить эту переменную? Или я могу сделать что-то Windows-esque, которое будет обрабатывать каждое событие мыши в форме?

Чтобы быть полностью сжатым, я хочу добиться того, чтобы, когда экран / кнопки КПК не касались в течение 10 минут, КПК это узнает и позволит мне запустить метод блокировки.

Буду очень признателен за любые мысли, помощь и руководство.

Редактировать : Я использую Compact Framework 2.0 в Windows Mobile 6.0, однако эта функция должна работать в Windows Mobile 5.0 и более поздних версиях.

Ответы [ 3 ]

3 голосов
/ 08 декабря 2008

Одним из возможных решений является использование входящего в режим ожидания питания КПК. Вы можете зарегистрировать уведомление для этого, используя событие OpenNETCF.WindowsCE.PowerManager.PowerIdle. На самом деле это хорошая идея, чтобы принять во внимание соображения управления питанием. Вы не можете ожидать, что ваш КПК будет постоянно находиться в одном и том же состоянии.

Другим решением было бы отслеживать неактивное событие драйвера ввода (см. Эту ссылку ). Однако это решение зависит от конкретного устройства.

К сожалению, в Windows CE нет способа зарегистрировать глобальное событие мыши.

Выше были решения для ОС. Нелегкий способ сделать это с помощью расширения классов Windows Form и Control. Возможно, вам придется расширить все элементы управления, которые вы будете использовать. Самым простым решением было бы реализовать метод GetFocus для всех ваших элементов управления и формы. Вы можете сбросить счетчик там.

Кстати, в среде рабочего стола это легко достигается с помощью GetLastInputInfo.

0 голосов
/ 26 ноября 2010

Раскрытое здесь решение работает у меня на WM6.5

http://www.dzhang.com/blog/2010/01/09/detecting-user-activity-or-inactivity-in-windows-mobile

0 голосов
/ 22 февраля 2009

Проверьте это сообщение:

http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/906b016d-f1ee-4b3e-b3df-1e3a6fea282a/

Я боролся с той же проблемой и в конечном итоге использовал Application.AddMessageFilter для получения соответствующих результатов. Этот поток в конечном итоге содержит ссылку на пример проекта, который я написал, показывающий работу таймера неактивности, включая отключение субдиалогов при необходимости, чтобы вернуться к экрану главного окна.

David

...