Hook过程的问题
最下面两个函数是两个按妞的事件响应函数。
设置断点时发现,按了一个键,会进入这个过程两次。
第一次,lParam>>29&&1的确=0;(我没按ALT),但是他接着又进去了这个函数,这个时候lParam为一个负数,lParam>>29&&1为1了,奇怪了。
HHOOK g_hookKeyboard;
LRESULT CALLBACK KeyboardProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
if((wParam=='a'||wParam=='A')&&1==((lParam>>29)&&1))
{
AfxMessageBox("123");
UnhookWindowsHookEx(g_hookMouse);
}
return 1;
}
void CHookMKDlg::OnKeyHook()
{
// TODO: Add your control notification handler code here
g_hookKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
}
void CHookMKDlg::OnKeyUnHook()
{
// TODO: Add your control notification handler code here
UnhookWindowsHookEx(g_hookKeyboard);
}
问题点数:20、回复次数:11Top
1 楼wf520pb()回复于 2006-11-03 10:06:59 得分 0
为什么会进去2次啊?
会出现这种情况是因为什么呢?
还请高手指教一下我啊!Top
2 楼tracing(攀登者)回复于 2006-11-03 14:06:12 得分 0
按键有个UP、DOWND的问题
if((wParam=='a'||wParam=='A') && ((DWORD)lParam&0x40000000) && (HC_ACTION == nCode))
把条件改成这样就没问题了Top
3 楼wf520pb()回复于 2006-11-05 19:00:27 得分 0
不行啊,这样还是没用啊 !Top
4 楼tracing(攀登者)回复于 2006-11-06 11:26:38 得分 0
你修改之后的代码是什么样的啊,我行的啊Top
5 楼wf520pb()回复于 2006-11-06 12:16:43 得分 0
LRESULT CALLBACK KeyboardProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // Keyboard coordinates
)
{
char c=wParam;
if((wParam=='a'||wParam=='A')&&1==((lParam>>29)&&1)&&((DWORD)lParam&0x40000000)&&nCode==HC_ACTION)
{
AfxMessageBox("123");
UnhookWindowsHookEx(g_hookMouse);
}
return 1;
}
我只按A也会弹出‘123’对话框Top
6 楼tracing(攀登者)回复于 2006-11-06 16:25:39 得分 0
可能我没理解你的意思,你原来的代码会弹出两个对话框,修改后不是只弹出一个了吗,你想要什么效果啊Top
7 楼wf520pb()回复于 2006-11-07 19:58:19 得分 0
我想要的效果是:
按住ALT+A后弹出"123"对话框!Top
8 楼wf520pb()回复于 2006-11-07 19:59:20 得分 0
但是出现的结果却是:
直接按A也可以出现这个对话框!Top
9 楼CBean(C豆)回复于 2006-11-07 20:30:02 得分 15
(lParam>>29)&&1)应该是(lParam>>29)&1)吧Top
10 楼high2003376320(年少但不轻狂)回复于 2006-11-07 21:07:00 得分 5
应该改为
LRESULT CALLBACK KeyboardProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // Keyboard coordinates
)
{
if((wParam=='a'||wParam=='A')&&1==((lParam>>29&1))
{
AfxMessageBox("123");
UnhookWindowsHookEx(g_hookMouse);
}
return 1;
}
经运行,没问题
Top
11 楼wf520pb()回复于 2006-11-08 14:08:57 得分 0
CBean(C豆)
呵呵,一只没看到这个错误,笑了!
谢谢!Top




