指定された修飾キー押下状態取得(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"); } } } |