C++ Windows 環境でキーボード コントロールを参照する場合、0x80 コードは何を意味しますか?
例えば、
if(GetKeyState('K') & 0x80) {
//do something
}
みんな、ありがとう!
アップデート
反対票が殺到したため、私はこれをさらに調査することになりました。戻り値 (16 進数) がどのように機能するかを次に示しますGetKeyState
。キーのトグル プロパティはよくわかりませんが、トグル元k
のデフォルト状態があると想定しています。
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
0xff80
上位ビットを設定する必要があり、下位ビットが意味をなす場合はいつでもSoが追加されます。これで、この0x80
アプローチが機能する理由がわかりました。下位バイトの上位ビットも設定されているからです。
古い回答
GetKeyStateSHORT
は、上位ビットが である場合、キーが有効であることを意味する を返します1
。のビットごとの AND演算は、0x80
そのビットが であるかどうかをチェックするだけです。1
0x80
10000000
したがって、ステートメントGetKeyState('K') & 0x80
は、によって返される0x80
値の上位ビットが であり、上位ビットが である場合に戻ります。GetKeyState('K')
1
0
0
関数のMSDN ドキュメントには次のように記載されています。
上位ビットが 1 の場合、キーはダウンしています。それ以外の場合は、アップしています。
ビット単位で 0x80 を使用すると、上位ビットが得られif
、結果がゼロか非ゼロかをチェックし、本質的にそのビットの値をチェックします。
GetKeyState()
ただし、このチェックはa を返しSHORT
、short の上位ビットをチェックするには、ビット単位で 0x8000 を使用する必要があるため、間違いのように見えます。
したがって、デバッガーで戻り値を確認し、これが実際にどのように機能するかを確認することをお勧めします。
0x80 ではなく 0x8000 を意味していると思います。その場合は、ドキュメント ( http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx ) を参照してください。このドキュメントには、GetKeyState の戻り値について次のように記載されています。 -
戻り値は、指定された仮想キーのステータスを次のように指定します。
• 上位ビットが 1 の場合、キーはダウンしています。それ以外の場合は、アップしています。• 下位ビットが 1 の場合、キーはトグルされます。CAPS LOCK キーなどのキーは、オンになっている場合に切り替えられます。下位ビットが 0 の場合、キーはオフであり、トグルされていません。キーボード上のトグル キーのインジケータ ライト (存在する場合) は、キーがトグルされるとオンになり、キーがトグルされないとオフになります。
私が知る限り、0x80は何の意味もありません
ドキュメントによると
戻り値は、指定された仮想キーのステータスを示します。
上位ビットが 1 の場合、キーは停止しています。それ以外の場合は、アップしています。
下位ビットが 1 の場合、キーはトグルされます。CAPS LOCK キーなどのキーは、オンになっている場合に切り替えられます。下位ビットが 0 の場合、キーはオフであり、トグルされていません。キーボード上のトグル キーのインジケータ ライト (存在する場合) は、キーがトグルされるとオンになり、キーがトグルされないとオフになります。
おそらく、トグル不可能なキー (「K」など) では、下位(あいまいな用語 - おそらく 0x0080 を意味しますか?)と上位 (0x8000) ビットは同じことを行いますか?