GetAsyncKeyState

GetAsyncKeyState - [IT资料]

该函数决定了在函数调用时,相应按键是处于按下还是弹起状态;并且按下此键前是否调用了GetAsyncKeyState。
SHORT GetAsyncKeyState(
  int vKey   // virtual-key code
);
参数说明:
vKey
定义了256个虚拟键码的其中一个。
在Windows NT/2000中,可以使用左右键区分常量来定义某些键。

返回值:

若函数调用成功,返回值指定了自上次调用GetAsyncKeyState以来,指定的按键是否处于按下状态,以及该键现在是处于按下还是弹出。如果最高位被置1,表明键被按下,如果是最低位被置1,则表明自前次调用GetAsyncKeyState一直处于按下状态。

 
然而,若处于另一个线程或进程的窗口拥有键盘焦点,则返回值为0。
在Windows 95下,不支持左右键区分常量。如果用这些常量来调用GetAsyncKeyState函数,则返回0。
备注:

该函数支持鼠标按钮。当然,它只能检查物理按钮的状态,而不是物理按钮映射的逻辑按钮。
 
例如,我们调用GetAsyncKeyState(VK_LBUTTON),总是能够返回鼠标左键的状态,而不管它是映射到逻辑上的左键还是右键。
可以调用  GetSystemMetrics(SM_SWAPBUTTON)来确定系统当前物理按钮和逻辑按钮的对应关系,如果返回为TRUE则表明按钮被左右交换。
尽管最低位的返回值表明了从上次调用以来指定的键是否被按下,由于Win32的抢先式多任务处理模式,另一个程序可能调用GetAsyncKeyState,取代你的程序而接收这个“最近按下的”键。最低位返回值的这种行为完全式为了兼容16位操作系统(它是非抢占式的),所以不能信赖。

可以使用VK_SHIFT,VK_CONTROL,VK_MENU作为变量来调用这个函数。这样可以指出SHIFT,CTRL,ALT的状态而不区分左右键。在NT/2000下,可以使用如下的常量来区分左右键:
VK_LSHIFT     VK_RSHIFT
VK_LCONTROL   VK_RCONTROL
VK_LMENU      VK_RMENU
这些参数仅当调用GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, 和MapVirtualKey这些函数时才可用。

例如:
        // ESC will stop capture
        case WM_KEYDOWN:
            if((GetAsyncKeyState(VK_ESCAPE) & 0x01) && gcap.fCapturing)
            {
                StopCapture();
                if(gcap.fWantPreview)
                {
                    BuildPreviewGraph();
                    StartPreview();
                }
            }
            break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值