判断键是否按下

//确定系统当前物理鼠标按钮与逻辑鼠标按钮的对应关系,当鼠标按钮被左右交换后,函数返回TRUE
int IsMouseSwap = ::GetSystemMetrics(SM_SWAPBUTTON);
//确定函数被调用时,相应按键是处于按下状态,还是处于弹起状态;并且按下此键前否调用过GetAsyncKeystate函数。
//若最高位被置为1,则键被接下:
//若最低位被置为1,则该键在前次调用GetAsyncKeystate以来处于被接下的状态
//若为0,则另一进程或线程中的窗口拥有键盘焦点(或是win95)
short iMouseKeyState = ::GetAsyncKeyState( IsMouseSwap ? VK_RBUTTON : VK_LBUTTON);
BOOL IsPrimaryMouseBtnDown = ( iMouseKeyState & 0x8000) != 0;



可以使用虚拟键码常数VD_SHIFT,VK_CONTROL,VK_MENU作为vKey参数的值,这样给出Shift Ctrl,AIt键的状态,而不区分是左键还是右键。
    Windows NT:可以使用如下的虚拟键码常数作为vKey的值来区分左右键的情况:
    VK_LSHIFT VK_RSHIFT;VW_LCONTROL VK_RCONTROL;VK_LMENU VK_RMENU
    这些可区分的左右键常量仅当调用GetKeyboardState,SetKeyboardstate,GetAsyncKeyState,GetKeyState和MaPViruaIKey函数时才可用。
原文地址:https://www.cnblogs.com/huqingyu/p/42906.html