ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


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";
    }
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.