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

StackOverflow https://stackoverflow.com/questions/349255

Вопрос

Доброе утро,

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Ознакомьтесь с этим постом:

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

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

Дэвид

Размещенное здесь решение работает для меня на WM6.5

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top