|
|
||||
Tips > |
|||||
GetKeyState で NumLock の状態を知る |
更新 : 2010/10/10 |
||||
|
|
||
解説: アプリケーション内では、任意のキーが押されているかどうか調べたい場面がよくあります。 Shift キーや Ctrl キーあるいは、他のキーとの組み合わせなど、いろいろです。 このような指定キーの状態を調べるには Win32API の GetKeyState 関数を使います。 今回は、GetKeyState 関数を使って、NumLock の状態(オンなのかオフなのか)を調べてみます。 ちょっと寄り道: GetKeyState は指定された仮想キーの状態を取得する関数で、以下のように定義されています。 SHORT GetKeyState( int nVirtKey // 仮想キーコード ); 取得された状態は、 キーが押されているか、 押されていないか、トグルされているか(キーが押されるたびにオン、オフが切り替わる) 、いずれかの状態を示します。 使用例: アプリケーションを起動して、NumLock をオン、オフしてみてください。 キーの状態に応じて Label1 に "ON"、"OFF" が表示されます。 準備としては Label を適当に置いておしまいです。 Form の OnKeyDown イベントハンドラで、NumLock が押されたかどうか判定し、GetKeyState 関数でキーの状態を取得しています。 結果は Label1 に "ON"、"OFF" で表示しています。 他のキーの状態も調べてみると良いでしょう。 //------------------------------------------------------------------- void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // NumLock の現在の状態を取得 // 押して離すたびに最下位ビットは 0 と 1 が入れ替わる(トグル)。 if (Key == VK_NUMLOCK) { if (GetKeyState(Key) & 0x1) Label1->Caption = "ON"; else Label1->Caption = "OFF"; } } //------------------------------------------------------------------- |