11

オンスクリーンキーボードを作成していますが、キーボードレイアウトが変更されたらすぐにレイアウトを再描画したいと思います。

現在私は電話します:

GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL));

キーを押すたびに、レイアウトが変更されたかどうかを確認します。ユーザーがマウスでレイアウトを変更した場合、キーが押されるまで機能しません。

現在のフォアグラウンドウィンドウのキーボードレイアウトが変更されたときに通知を受け取る方法があるかどうか知りたいので、変更が発生したらすぐにレイアウトを再描画できます。

4

2 に答える 2

10

やり方がある ...

まず、フォアグラウンドウィンドウの変更をキャプチャするためにアプリケーションを登録する必要があります。そのために(および.NETとして)
使用SetWinEventHookします。EVENT_SYSTEM_FOREGROUND WINEVENT_OUTOFCONTEXT

その場合:GetKeyboardLayoutソリューションを使用して、そのウィンドウの現在のレイアウトを取得します。

次に、新しいフォアグラウンドウィンドウのスレッドでローカルWindowsフック (おそらくキーキャプチャに低レベルでグローバルに使用している)を使用します。そのウィンドウへのメッセージを 聞いて、レイアウトの変更を受け取ります。(別のフォアグラウンドの変更後にフックを解除/再フックすることをお勧めします)WH_CALLWNDPROC
WM_INPUTLANGCHANGE

于 2011-11-28T01:48:50.790 に答える
0

キーボードレイアウトはここに保存されているようです:HKEY_CURRENT_USER \ Keyboard Layout \ Preload

キーボードの言語を変更すると、設定の順序が変わりました。

したがって、レジストリエントリを監視できる可能性があります。これが1つの方法です:

http://www.codeproject.com/KB/system/registrymonitor.aspx

于 2011-11-27T23:12:34.957 に答える