只允许一次按键

时间:2018-01-08 00:38:36

标签: c++ winapi

如何确保用户只按一次按键并禁用按键,这样价值不会增长?用户可以再次按下键,但不能按住键.thx

3 个答案:

答案 0 :(得分:1)

WM_KEYDOWN消息将先前的密钥状态存储在SELECT * FROM users where user_id!='1' AND (fast_name LIKE '%asim%' OR last_name LIKE '%asim%' OR CONCAT(fast_name,' ',last_name) LIKE '%asim%') 参数的第30位。如果您只想处理初始击键,则可以忽略设置此位的所有lParam消息。

答案 1 :(得分:0)

处理WM_KEYDOWN而不是WM_CHAR

lParam的第30位表示先前的键状态。

答案 2 :(得分:0)

任何按下一次或多次的键,只会被按下(释放)一次...... 假设您的回调函数是

LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)

为了过滤同一个键上的多个匹配并将其捕获为一个,您可以使用

if((nCode >= 0) && ((wParam == WM_KEYUP) || (wParam == WM_SYSKEYUP)))
{
    KBDLLHOOKSTRUCT *kb = (KBDLLHOOKSTRUCT*)lParam;

其中kb->vkCode将为您提供按下的键,您将获得此事件消息一次。 至于禁止用户多次敲击相同的键(或者足够长以生成2个或更多KEYDOWN事件,它取决于控制面板的键盘设置,因此最好只捕获多个键击中一次。 Keyboard Settings