我在我程序中的VIEW类中的OnInitialUpdate()中:SetHook( this->GetParent()->GetSafeHwnd() );
这个SetHook的定义在我的DLL中,
请看下面的代码:LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
KBDLLHOOKSTRUCT *pStruct = (KBDLLHOOKSTRUCT*)lParam;
if( nCode == HC_ACTION )
{
if( !(lParam & 0xA0000000) )
{
if( pStruct->vkCode == 0x53 && pStruct->flags & LLKHF_ALTDOWN )
{
AfxMessageBox( "OK" );
//SendMessage( myHwnd, WM_CLOSE, 0, 0 ); //这里的myHwnd的句柄的值是我在视图类中的OnInitialUpdate()中的SetHook( HWND hWnd )得到的;如果我把SetHook()的接口改成SetHook( CWnd *cWnd ),然后在视图类中OnInitialUpdate()得到程序的cWnd地址,但是运用cWnd->IsWindowsVisible()的话程序会出错,不知道是什么原因,所以我让我的SetHook接口保持得到一个HWND值,但是HWND没有IsWindowsVisible()功能,那么如何判断这个HWND的窗口是否可见,我主要的功能是想在程序中按下ALT+S窗口就会隐藏,再按一下窗口又会显示.另外还有1个问题就是为什么这个地方老是执行2次?我在按下ALT+S后为什么这个消息框会显示2个?if( !(lParam & 0xA0000000) )这个语句不是判断只一次吗?我哪里出错了?
}
}
}
return CallNextHookEx( hHook, nCode, wParam, lParam );
}

解决方案 »

  1.   

    句柄值没有IsWindowVisiable这个功能呀?而且我在DLL中使用CWnd类的IsWindowVisiable程序会出错,不知道为什么
      

  2.   

    LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
    {
    KBDLLHOOKSTRUCT *pStruct = (KBDLLHOOKSTRUCT*)lParam;
    if( nCode == HC_ACTION )
    {
    if( pStruct->vkCode == 0x53 && pStruct->flags & LLKHF_ALTDOWN )
    {
    if( !(lParam & 0xA0000000) )
    {
    if( ::IsWindowVisible( myHwnd ) )
    //AfxMessageBox( "OK" );
    ::ShowWindow( myHwnd, SW_HIDE );
    else
    ::ShowWindow( myHwnd, SW_SHOW );
    }
    }
    }
    return CallNextHookEx( hHook, nCode, wParam, lParam );
    }我现在的代码一执行后窗口隐藏后又立刻显示了,好像执行了2次,如何让我的代码按一次键只执行一次?