[kaze's test] プログラミングメモ →目次

指定された修飾キー押下状態取得(VC++)

シフトキー、コントロールキーなどの修飾キーの押下状態を取得する方法についてのメモです。

1.SHORT GetKeyState(int nVirtKey)関数で、修飾キーの押下状態を取得します。nVirtKeyで、仮想キーコードを指定します。関数が成功すると、指定された仮想キーの状態が返ります。最上位ビットが 1 になったときはキーが押されていることを、0 のときはキーが押されていないことを示します。下のソースコードは、マウスの状態を見ながらコントロールキーの押下状態を調べるプログラムです。

void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 
{    
    if ((GetKeyState(VK_CONTROL) & 0x8000))
    {
        TRACE("ctrlキー押下!\r\n");
    }
    else
    {
        TRACE("ctrlキー押下しない!\r\n");
    }
    CDialog::OnMouseMove(nFlags, point);
}


2.BOOL GetKeyboardState(PBYTE lpKeyState)関数で、修飾キーだけの押下状態ではなく、すべての仮想キーの状態を指定されたバッファ にコピーします。バッファは、256 バイトで、添え字は仮想キーの値です。最上位ビットが 1 になったときはキーが押されていることを、0 のと きはキーが押されていないことを示します。下のソースコードは、マウスの状態を見ながらコントロールキーの押下状態を調べるプログラムです。

void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 
{    
    BYTE KeyState[256];
    BOOL bRet = GetKeyboardState(KeyState);
    if (bRet)
    {
        if (KeyState[VK_CONTROL] & 0x80)
        {
            TRACE("ctrlキー押下!\r\n");
        }
        else
        {
            TRACE("ctrlキー押下しない!\r\n");
        }
    }
}