能力值:
( LV7,RANK:100 )
|
-
-
2 楼
因为bPressed是局部变量
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢2楼的回答!改成全局变量后,出现另外一个问题,没达到预期效果。现在的问题是:按一下左shift只执行一次,跟踪结果是while()中按下F1后,bPressed就成0了,本意是想按一次shift后,一直自动循环F1F2F1F2……直到下一次shift按键。求解。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
键盘底层,我晕,我吐血
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
while(bPressed)
{
keybd_event(0x70 , MapVirtualKey(0x70,0) , 0 , 0); //按F1
Sleep(50);
keybd_event(0x70 , MapVirtualKey(0x70,0) , KEYEVENTF_KEYUP , 0);
Sleep(300);
keybd_event(0x71 , MapVirtualKey(0x71,0) , 0 , 0); //按F2键
Sleep(50);
keybd_event(0x71 , MapVirtualKey(0x71,0) , KEYEVENTF_KEYUP , 0);
Sleep(300);
} break;
我真没看出来 这个循环里 bPressed 是怎么变成零的
设计思路有问题
另外
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
按下弹起你都关注 按一次SHIFT键盘做了两次标记变化 那么bPressed自然变回去了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢楼上各位老师指点!一是设置bPressed为全局变量,二是case WM_SYSKEYDOWN:后面加上break。非常感谢!尤其是起床就看到了tydef的详细解释,现在改成如下后,再按左Shift停不下来
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WORD wParam,DWORD lParam)
{
PKBDLLHOOKSTRUCT p = NULL;
if (nCode == HC_ACTION)
{
p = (PKBDLLHOOKSTRUCT) lParam;
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
break;
case WM_KEYUP:
case WM_SYSKEYUP:
if(p->vkCode == VK_LSHIFT)
{
bPressed ^= 1;
if(bPressed) OutputDebugString("bPressed = 1");
else OutputDebugString("bPressed = 0");
while(bPressed)
{
keybd_event(0x70 , MapVirtualKey(0x70,0) , 0 , 0); //按F1
Sleep(50);
keybd_event(0x70 , MapVirtualKey(0x70,0) , KEYEVENTF_KEYUP , 0);
Sleep(300);
keybd_event(0x71 , MapVirtualKey(0x71,0) , 0 , 0); //按F2键
Sleep(50);
keybd_event(0x71 , MapVirtualKey(0x71,0) , KEYEVENTF_KEYUP , 0);
Sleep(300);
}
break;
}
default:
break;
}
}
return ((int) CallNextHookEx(hHook,nCode,wParam,lParam));
}
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
高手帮忙看下,为什么bPressed一直等1呢?以后的shift按键一直进不了if(),为什么啊?在线求助
=============
问题解决,原来是while()死循环,跳不出来
|
能力值:
( LV4,RANK:40 )
|
-
-
8 楼
bPressed ^= 1; 这个明显用错了。改为 bPressed = !bPressed
|
|
|