0

私は、Windows Mobile 6.1 / 6.5でC#とC/++の間の境界線にまたがるアプリケーションの作成に取り組んでいます。現在、デバイスでキオスクアプリケーションを実行しており、2番目のキオスクアプリケーションに切り替える機能を追加したいと考えています。

私たちの目標は、プロセスウィンドウが押されるたびにプロセスウィンドウを切り替えるグローバルホットキーを確立することです(alt + tabの動作と同様)。すでに両方のアプリケーションがあり、プロセスを切り替えるコードをいくつか作成しましたが、プロジェクトのグローバルホットキー部分を機能させるのに苦労しています。

私が行ったすべての読みから、グローバルキーの押下を監視する最良の方法は、coredll.dllのSetWindowsHookEx関数を使用してシステムメッセージポンプにリンクすることであると理解しています。残念ながら、この機能はプラットフォームで技術的にサポートされていないことも読みました。

また、MFCフレームワークでON_WM_KEYUP / ON_WM_KEYDOWNマクロを使用してメッセージマップを使用することを提案するチュートリアルをいくつか見つけましたが、WindowsMo​​bileに固有のドキュメントは見つかりませんでした。ここのドキュメントを使おうとすると、デバイスがクラッシュし続けました。

プラットフォームにある種のグローバルキーフックを設定するための受け入れられたベストプラクティスはありますか?そうでない場合、少なくとも技術的にサポートされているものはありますか?

前もって感謝します。

ReplyQuote

4

3 に答える 3

0

実際には、coredll.dllのGetAsyncKeyState関数を別のスレッドでポーリングすることになりました。スレッドは特定のキーを監視し、押されるたびにイベントをスローします。

イベントはキーポーリングスレッドで実行されるため、イベントがスローされたときに必ずデリゲートを使用してGUIスレッドでハンドラーを呼び出す必要があります。

于 2011-05-16T12:47:46.160 に答える
0

Why not use a RegisterHotKey call and use that to swap applications? IIRC the hardware buttons typically map to key codes starting at 0xC1 (193).

于 2011-05-09T22:36:14.687 に答える
0

私はキーボード フックを使用しますが、RegisterHotKey が特定のシナリオで機能しなかった場合に限ります。

私が行ったすべての読書から、グローバル キーの押下を監視する最善の方法は、coredll.dll の SetWindowsHookEx 関数を使用してシステム メッセージ ポンプにリンクすることであると理解しています。残念ながら、この機能はプラットフォームで技術的にサポートされていないことも読みました。

技術的にサポートされていません。理論的には正しいですが、実際にサポートされていない WM 6.5.* デバイスは見たことがありません。キーボード フックは、バーティカル マーケットのカスタム頑丈な WM デバイス アプリの非常に重要な機能であるため、下位互換性のために削除することはできないと思います。

WM スペースのエンタープライズ側は非常に重要です。

于 2011-05-16T12:59:52.700 に答える