1

再現可能なバグに遭遇しましたが、これは私には意味がありません。うまくいけば、誰かが Windows (私は Windows 7 を使用しています) でのキーボード入力の内部について詳しく知っていて、それを解決する方法について正しい方向に向けることができます。今のままでは、どこに目を向ければよいのかよくわかりません。

私のアプリケーションは、 MouseKeyboardActivityMonitorライブラリを使用して、グローバル キーボード フックを作成します。これは私にとっては問題なく機能していましたが、別のキーボード入力言語を使用している人々からすぐにバグ レポートを受け取りました。ë や ê などのアクセント付きの文字を書くと、それぞれ ¨¨e や ^^e と表示されますこのバグは図書館のウェブサイトでも報告されていますが、まだ解決されていません。

バグを再現するために、既存の「英語 (米国)」の隣に「オランダ語 (ベルギー)」という別の入力言語を設定しました。いろいろいじってみたところ、次のことがわかりました。

フックをインストールするアプリケーションにフォーカスがあり、言語が 'English (United States)' に設定されている場合、バグは発生しません。他のアプリケーション (メモ帳など) で書き込み、「オランダ語 (ベルギー)」を使用して特殊文字を書き込めます。このバグは、フックをインストールするアプリケーションにフォーカスがあり、言語が「オランダ語 (ベルギー)」に設定されている場合に発生します。

両者の関係について、何らかの手がかりを探しています。おそらく、キーボード フック ライブラリに追加のチェックを導入する必要がありますか? キーボード フックのソース コードは、オンラインで入手できます

4

1 に答える 1

0

アプリケーションで入力言語が更新されていないようです。使用しているライブラリのソース コードを見ると、この呼び出しを使用して正しいキーボード レイアウトを取得しているようです。

   internal static extern uint GetKeyboardLayout( int dwLayout );

ただし、このメソッドのドキュメントでは次の点が強調されています。

入力ロケール識別子は、音声からテキストへのコンバーター、入力方式エディター (IME)、またはその他の形式の入力も含むことができるため、キーボード レイアウトよりも広い概念です。キーボード レイアウトは動的に変更できるため、現在のキーボード レイアウトに関する情報をキャッシュするアプリケーションは、WM_INPUTLANGCHANGE メッセージを処理して、入力言語の変更を通知する必要があります。

ただし、コードをざっと見てみると、ライブラリはこのWM_INPUTLANGCHANGEメッセージに応答していないようで、この動作が発生する可能性があります

また、キーボードがWindowsによってどのように処理されるかについての説明への便利なリンクがあります

于 2013-08-22T21:12:08.253 に答える