为什么我建的钩子只能捕获本窗口的消息,对别的窗口怎么不能捕获?
BOOL CCaptureHook::InstallMouseHook()
{
if (!ghMouseHook) ghMouseHook = ::SetWindowsHookEx(WH_MOUSE,MouseProc,ghModule,0);
return (ghMouseHook != NULL);
}extern "C" _declspec(dllexport) LRESULT WINAPI MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode >= 0)
{
if (wParam == WM_LBUTTONDBLCLK|| wParam == WM_NCLBUTTONDBLCLK)
{
int a=0;
//在这里设置断点,在当前程序上双击时会停住,在其他窗口都不行
}
}
return ::CallNextHookEx( ghMouseHook, nCode, wParam, lParam );
}

解决方案 »

  1.   

    your project should be a dll first,and the ghMouseHook handle should put in prama segment.
      

  2.   

    要是dll才能加载倒所有得进程空间中去哦
      

  3.   

    全局钩子必须是做在dll里面的才行,你的ghModule是dll的实例句柄吗?
      

  4.   

    这个是当然阿,否则也不需要CallNextHookEx了……只有你调用了CallNextHookEx以后后面的钩子才能继续处理这个消息……
      

  5.   

    不调CallNextHookEx直接return这个消息还是在啊
      

  6.   

    现在新问题是如何在钩子回调函数内将处理过的鼠标消息抛弃,就是不再往下传递?
    ==============================================================================
    直接 return TRUE;
      

  7.   

    回调函数呢?去vckbase里面找找,多的是.MSDN里面也有
      

  8.   

    “这个消息还在”是什么意思啊?
    --------
    比如我在钩子函数里处理了WM_LBUTTONDOWN消息,希望这个WM_LBUTTONDOWN消息不要再被系统处理,但事实上系统还是捕获到这个消息了。 kugou123(酷狗)(http://www.xiaozhou.net) :
    在钩子函数里直接 return TRUE;这个消息为什么还是在的啊。
      

  9.   

    咿?好象RETURE TRUE是可以了.
    还有要请教大家一个问题:
    我通过GetDC(0),根据鼠标位置GetCursor(&pt)要在屏幕上画穿过点pt的一根直线和一根竖线
    int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYSCREEN);
    POINT pt;
    GetCursor(&pt);
    dc.MoveTo(pt.x,0);
    dc.LineTo(pt.x,cy);
    dc.MoveTo(0,pt.y);
    dc.LineTo(cx,pt.y);
    在移动鼠标后要再画出新的两根线,那么有什么好的方法去除上次的那两根线,
    我用先保存整个桌面位图,然后每次在画线之前先BitBlt(..,SRCCOPY)桌面觉得不太理想(鼠标移动的快有闪烁),问下CDC有没有提供好的函数来完成这样的操作?