2

詳細: Windows CE 4.2、Compact Framework 2.0 SP1 を実行するカスタム モバイル デバイス。今まで問題なく P/Invokes を適切に使用する C# アプリ。

低レベルのキーボード フック (この CodeProject の投稿と似ていますが、同一ではありません) を作成しましたが、これは 1 つの例外を除いて驚くほど機能します。私たちのソフトウェアが行うことの 1 つは、Windows CE の画面調整機能へのアクセスを許可することです。これは、一連のターゲットをタップする必要がある画面であり、最後に Esc を押してキャンセルするか、Enter を押して受け入れます。この機能は P/Invoke を介して呼び出しますが、この Win32 API 関数内で発生するキー押下は、私のキーボード フックによって妨害されていると思います。

私のキーボード フックは集中的なことは何もせず、実行フローも変更しませんが、この 2 つの使用法は根本的に互換性がない可能性があると思います。この画面を実行した後にデバッガーを終了すると、すべての Enter キーを押して、プログラムを閉じるときに一度にすべての「ヒット」を試みました (このデバイスはカチカチというタイピング音を出します)。これは、フックがキープレスを Win32 API 関数に適切に渡していないことを示しています。何かご意見は?


a) キーボード フックとキーボードを必要とする P/Invokes に互換性がない、
b) キーボード フックの実装に問題がある、
c) ハードウェアの製造元、ドライバーなどにまったく依存していると思いますか?

ご協力いただきありがとうございます!

4

1 に答える 1

2

a)いいえ、完全に互換性があります。キーボードフックはケネルレベルで発生するため、キーボードメッセージを使用するものはすべて、ネイティブコードまたはマネージコードのどちらからのものであっても、キーボードメッセージを通過します。

b)実装がわからないため、わかりにくい

c)これは可能です(CEのほぼすべてがOEMで変更可能であるため、何でも可能です)が、それほど可能性は高くありません。ほとんどのOEMは、GWES(これが存在する場所)をそのまま使用できるため、あまり使用しません。

今、あなたが見ている特定の部分は、TouchCalibrateへの呼び出しからのものだと思いますよね?ここでの最善の策は、TouchCalibrateソースコードを具体的に確認することです。これには、Platform Builder(evalバージョンを含む)が付属しています。

私の推測では、それは「傍受」しているか、少なくともメッセージがディスパッチされるのを防いでいると思います。私がそこにいたのは久しぶりで、それはタッチパネルドライバーをしている間だったので、キーボードの取り扱いについてはあまり見ていませんでしたが、それが何をしているのかは、GWESサブシステムに制御を割り当てて生のタッチパネルポイントを調べます- Windowsアプリを実行していません。したがって、これらのキー押下のディスパッチを処理するアプリメッセージポンプは何もしていない可能性があります(モーダルダイアログを投げるときのようなものです)。

何が起こっているのかを正確に説明する必要があります。「この画面を実行した後にデバッガーを終了すると」と言いますが、それが何を意味するのかわかりません。コードでTouchCalibrateを呼び出し、デバッグを停止してからメッセージがディスパッチされるということですか、それともTouchCalibrate自体の画面が閉じたらメッセージがディスパッチされるのでしょうか。

Remote Spy++またはKernelTrackerも、何が起こっているかについての洞察を与える可能性があります。

于 2008-12-04T23:30:55.883 に答える