2

MSDNから

最上位ビットが設定されている場合はキーが押されており、最下位ビットが設定されている場合は、前回のGetAsyncKeyStateの呼び出し後にキーが押されました。ただし、この最後の動作に依存しないでください。[..]

戻り値の最下位ビットは、最後のクエリ以降にキーが押されたかどうかを示しますが、Windowsのプリエンプティブマルチタスクの性質により、別のアプリケーションがGetAsyncKeyStateを呼び出して、アプリケーションの代わりに「最近押された」ビットを受け取ることができます。戻り値の最下位ビットの動作は、16ビットWindowsアプリケーション(プリエンプティブではない)との互換性のために厳密に保持されているため、信頼しないでください。

私のプログラムでは、キーが現在押されている場所の戻り値にのみ関心があります。つまり、msdnで定義されているように、最下位ビットと最上位ビットの両方が設定されている場合(-32767)(これが現在の動作方法です)。ただし、32767(最下位ビットのない値)もチェックする必要があります。それが言うように、最下位ビットが別のプログラムによってインターセプトされるか、「信頼できない」場合は、それが何を意味するかに関係ありません。

4

2 に答える 2

0

ええ、基本的に。ただし、最上位ビットのみをチェックし、最下位ビットを完全に無視する方が簡単です。

32767(最小信号ビットのない値)もチェックする必要があります

そうではありません-値は-32768になります(2の補数を想定):

1000 0000 0000 0001   -32767
1000 0000 0000 0000   -32768

こちらもご覧ください; この値がにパックされているのは不思議ですshortが、そこに行きます。

于 2012-11-25T01:23:58.493 に答える
0

GetAsyncKeyState()最後に呼び出してから押されたかどうかを判断しようとするため、信頼性が低くなります。他の何かがそのフラグを呼び出して効果的にリセットした可能性があるため、フラグを受け取ることはありません。

于 2012-11-26T13:55:12.390 に答える