如果是键被按下响应以下代码就可以
int g_KeyValue = -1;//全局变量
键盘按下事件中
KeyPressEvents(int Value)
{
if (Value == g_KeyValue)
{
return;
}
g_KeyValue = Value;
按键值处理部分代码
}
键盘释放事件
KeyUpEvents(int Value)
{
if (Value == g_KeyValue)
g_KeyValue = -1;
}
这样一个键被按下时会响应,一直按住就不会响应,直到释放以后,重新按下,再次响应
加了时间判断就行了 定义个变量int shijian=0;
在按键里面的函数外围加个判断 if(GetTickCount()-shijian>??)
在这个判断里面加上shijian=GetTickCount();
这样就可以了! 上面的??是你自己需要间隔的时间 多少自己定 1000 =1秒的说1
WM_KEYDOWN消息里
DWORD reSend=HIWORD(pMsg->lParam);
if (reSend & 0x4000)//判断是否为自动重发消息
{
......
}
-----------------------------------------------------
补充:
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_KEYDOWN:
if (HIWORD(lParam) & 0x4000)
{
return 0;
}
...........//其他处理
return 0;
...........//其他消息响应
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
这样就可以限制所有键盘按键的自动重复消息。
---------------------------------------------------
如果你想让指定的按键限制自动重复消息。
case WM_KEYDOWN:
if ((HIWORD(lParam) & 0x4000) && ((wParam==VK_F2) || (wParam==VK_F3)))//例如只想屏蔽F2和F3的按键重复
{
return 0;
}
...........//其他处理
return 0;
----------------------------------------------
如果想随时改变1个按键的限制。那就定义1个变量,
if ((HIWORD(lParam) & 0x4000) && ((wParam==VK_F2) || (wParam==VK_F3)) && (加上你的变量限制判断) )
----------------------------------------------
这样就能达到效果。
你响应WM_KEYUP不就行了么?对KEYDOWN不做处理。或者再KEYDOWN里使用一个
while(1)循环,检测该键状态,不up不执行,up后break循环再执行代码。为减少cpu消耗,可在循环中设置Sleep。大小可视需要而定。