在按下我指定的键后,我的这个代码总是执行2次。害得我要隐藏的窗口一隐藏后马上又显示出来了,怎么改才能实现让以下代码只执行一次,就是按下我指定的键以后。
以下是我的键盘HOOK代码:
LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
KBDLLHOOKSTRUCT *pStruct = (KBDLLHOOKSTRUCT*)lParam;
if( HC_ACTION==nCode )
{
if( pStruct->vkCode == 0x53 && pStruct->flags & LLKHF_ALTDOWN )
{
if( ::IsWindowVisible( myHwnd ) )
::ShowWindow( myHwnd, SW_HIDE );
else
::ShowWindow( myHwnd, SW_SHOW );
}
} return CallNextHookEx( hHook, nCode, wParam, lParam );
}
以下是我的键盘HOOK代码:
LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
KBDLLHOOKSTRUCT *pStruct = (KBDLLHOOKSTRUCT*)lParam;
if( HC_ACTION==nCode )
{
if( pStruct->vkCode == 0x53 && pStruct->flags & LLKHF_ALTDOWN )
{
if( ::IsWindowVisible( myHwnd ) )
::ShowWindow( myHwnd, SW_HIDE );
else
::ShowWindow( myHwnd, SW_SHOW );
}
} return CallNextHookEx( hHook, nCode, wParam, lParam );
}
如果用WH_KEYBOARD,我上面的代码不要说2次,1次也不会执行呀.
我觉得问题应该是出在键盘的按下和弹起的上面,就是不知道如何判断,谁能帮我改一下吗?
{
if( wParam == 0x41 && lParam & 0x20000000 )
{
if(...)
{
...
}
else
{
...
}
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam );
{
// 一般都是这样写过滤多余的一次
if (lParam & 0x80000000)
{
......
}
}
为什么我加了if (lParam & 0x80000000)后,反而一次也不能执行了?你看看我哪里出错了?LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
KBDLLHOOKSTRUCT *pStruct = (KBDLLHOOKSTRUCT*)lParam;
if( HC_ACTION==nCode )
{
if (lParam & 0x80000000)
{
if( pStruct->vkCode == 0x53 && pStruct->flags & LLKHF_ALTDOWN )
{
AfxMessageBox( "OK" );
if( ::IsWindowVisible( myHwnd ) )
::ShowWindow( myHwnd, SW_HIDE );
else
::ShowWindow( myHwnd, SW_SHOW );
}
}
} return CallNextHookEx( hHook, nCode, wParam, lParam );
}
i=0
KeyboardProc
{
i++;
if(i==2)
{
//处理代码
i=0;
}
}