Compact Framework-非アクティブ期間後のUIのロックのタイムアウト機能
-
20-08-2019 - |
質問
おはようございます
私は、路上で使用される中規模のPDAアプリケーションの開発者です。 PDAには、漠然と機密性の高いデータ(名前や住所など)が含まれます。モバイルデータベースの暗号化は既に処理されていますが、誰かがログインしている間にPDAを手に入れた場合、バッテリーがなくなるか、アプリケーションを閉じて再度ログインするまで、喜んでデータを調べることができます。
ユーザーがPDAアプリケーションにアクセスするとき、ユーザー名とPIN番号を入力する必要があります。このソフトウェアのバージョン1では、システムのすべてのボタンにイベントがフックされていたため、ボタンが押されると、LastActionTimeという変数が更新されました。メインフォームでタイマーが実行され、そのLastActionTimeが10分以上前であれば、システムは前のユーザー/管理者が再びログインするまで(Windowsロックアウト画面のように)ログインフォームを再び表示します。
これはうまく機能しました...ある意味で...問題は、ボタンのみを処理し、ListViews、PictureBoxesなどの他のコントロールを処理しなかったことです
これを達成する良い方法はありますか?たとえば、Windowsフォームクラスを拡張してすべての単一イベントを処理し、それに応じてその変数を更新する方法はありますか?または、フォーム上のすべてのマウスイベントを処理するウィンドウ風の何かを実行できますか?
完全に簡潔にするために、私が達成したいのは、PDAの画面/ボタンが10分間タッチされなかった場合、PDAはこれを認識し、ロックアウトメソッドを起動できるようにすることです。
ご意見、ヘルプ、ガイダンスをいただければ幸いです。
編集:Windows Mobile 6.0でCompact Framework 2.0を使用していますが、この機能はWindows Mobile 5.0以降で動作する必要があります。
解決
可能な解決策の1つは、PDAの電源アイドル状態への依存に依存することです。 OpenNETCF.WindowsCE.PowerManager.PowerIdleイベントを使用して、これに関する通知を登録できます。実際、電源管理の考慮事項を考慮することをお勧めします。 PDAが常に同じ状態になることは期待できません。
別の解決策は、入力ドライバーの非アクティブなイベントを監視することです(こちらを参照してくださいリンク)。ただし、このソリューションはデバイス固有のものです。
残念ながら、Windows CEにはグローバルなマウスイベントフックを登録する方法はありません。
上記はOSソリューションです。 Windows FormおよびControlクラスを拡張する簡単な方法はありません。おそらく、使用するすべてのコントロールを拡張する必要があります。最も簡単な解決策は、すべてのコントロールとフォームにGetFocusメソッドを実装することです。そこでカウンターをリセットできます。
ところで、デスクトップ環境では、これはGetLastInputInfoで簡単に実現できます。
他のヒント
この投稿をチェックしてください:
同じ問題に取り組み、最終的にApplication.AddMessageFilterを使用して適切な結果を取得しました。そのスレッドには最終的に、メインウィンドウの画面に戻るために必要に応じてサブダイアログをシャットダウンするなど、非アクティブタイマーの動作を示すサンプルプロジェクトへのリンクが含まれています。
デビッド
ここに投稿されたソリューションは、WM6.5で動作します
http: //www.dzhang.com/blog/2010/01/09/detecting-user-activity-or-inactivity-in-windows-mobile