代码在这里:
LRESULT CALLBACK KeyBoardProc(int nCode,WPARAM wParam, LPARAM lParam )
{
if(nCode>=0)
{
if((lParam&0xc000ffff)==1) // key down // 是不是这里的问题?
::PostMessage(m_h0Main,WM_HOOK_KEYDOWN,wParam,lParam); //或者这里?
}
return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
}// m_h0Main 是调用此DLL 的主程序窗口句柄
// if((lParam&0xc000ffff)==1) 不知这样得到 WM_KEYDOWN 对不对? 还有什么其它的方式?// 再有就是,我长按住一个键,怎么只会收到一个WM_KEYDOWN 不是会有一连串WM_KEYDOWN的吗?谢谢 各位!
LRESULT CALLBACK KeyBoardProc(int nCode,WPARAM wParam, LPARAM lParam )
{
if(nCode>=0)
{
if((lParam&0xc000ffff)==1) // key down // 是不是这里的问题?
::PostMessage(m_h0Main,WM_HOOK_KEYDOWN,wParam,lParam); //或者这里?
}
return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
}// m_h0Main 是调用此DLL 的主程序窗口句柄
// if((lParam&0xc000ffff)==1) 不知这样得到 WM_KEYDOWN 对不对? 还有什么其它的方式?// 再有就是,我长按住一个键,怎么只会收到一个WM_KEYDOWN 不是会有一连串WM_KEYDOWN的吗?谢谢 各位!
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=192660
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=190021
if(nCode>=0)
{}
不是不对,按下一个键本来就只有一个WM_KEYDOWN消息,如果弹起就会有两个消息。需要判断按键状态。
//
有时有三四个呢,我只是击一下键(没有长按住),这也有时也会收到三四个,真是搞不懂///////////////////////////////////////////////////////////////
回复人: crystal521(水晶泪) ( ) 信誉:95 2004-10-09 16:08:00 得分: 0
if (!(lParam & 0xA0000000))//保证响应一次看看这个
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=192660
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=190021//
看了!!
还不是很明白
我是想,钩到所有的WM_KEYDOWN (包括长按住一个键时一连串的WM_KEYDOWN)
if(nCode==HC_ACTION)
{
if(!(lParam & 0xA0000000))//相应一次
{
if((lParam & 0xc000ffff)==1) // key down
{
::PostMessage(m_h0Main,WM_HOOK_KEYDOWN,wParam,lParam);
}
}
}但是钩不到 ALT 键, 且,长按一个键时,收不到一连串的WM_KEYDOWN 这些都是我必需的呀怎么办?