プログラムで物理キーボードレイアウトを取得します
-
12-10-2019 - |
質問
コンピューターがどのようなキーボードを持っているか(つまり、キーがどこにあるか、どの場所にどのような場所が存在するか)をプログラム的に見つける方法はありますか?
キーボードが非常に標準以外の場合は、少しエラーが受け入れられますが、一般的に、ポイントは、画面上のキーボードのようなアプリケーションを構築することで、画面にキーボードレイアウトを動的に描画できるようにします。
解決
キーボードがWindowsに物理レイアウトがどのように見えるかを伝えることができるメカニズムはありません。画面上のキーボードのWindowsバージョンであるOSK.EXEで簡単に見えます。マシンのフォームファクター(ラップトップvsデスクトップ)を推測できるようですが、ラップトップではキーボードのレイアウトと一致しません。
OSK.exeレイアウトをテンプレートとして使用して、あなたのものがうまく一致しないと文句を言うことはできません。
他のヒント
コンピューターに接続すると、キーボードは「スキャンコード」をオペレーティングシステムに送信します。 Windowsでは、スキャンコードが仮想キー(キーボードのハードウェアに依存しないマッピング)に変換され、実際の文字に変換されます。
MapVirtualKeyEx()
Windows APIの関数を使用すると、スキャンコード、仮想キー、文字間で翻訳できます。また、キーが存在しないかどうかを伝えることができるはずです。
一緒に GetKeyboardLayout()
これにより、どのキーバードがいつでもアクティブであるかがわかります(キーボードレイアウトは、実行中のアプリケーションごとに異なる場合があります)、キーボードのかなり正確なマップを構築できるようにする必要があります。
とにかく、を見てください keyboard input section of the MSDN
すべてのキーボードにはほぼ同じレイアウトがあると付け加えます。キーが物理的に配置されている場所を知る方法はありませんが、おそらくスキャンコードと独自のキーボードの基本的な知識から推測できます。