我的动态链接库导出EnumWindows的回调函数__declspec(dllexport) BOOL CALLBACK EnumWindowsProcess(HWND handle,LPARAM parameter)
{
char name[MAX_PATH]={0}; GetClassName(handle,name,MAX_PATH); if (strcmp(name,TEXT("QWidget"))==0)
{
SetWindowsHookEx(WH_KEYBOARD,KeyboardProcess,Instance,GetWindowThreadProcessId(handle,0));
}
return 1;
}我的可执行程序调用API EnumWindows枚举桌面所有窗口对目标安装钩子 安装容易卸载却难请教前辈高人指点

解决方案 »

  1.   

    BOOL UnhookWindowsHookEx(  HHOOK hhk   // handle to hook procedure);
    HHOOK SetWindowsHookEx(
      int idHook,        // hook type
      HOOKPROC lpfn,     // hook procedure
      HINSTANCE hMod,    // handle to application instance
      DWORD dwThreadId   // thread identifier
    );
      

  2.   

    把SetWindowsHookEx返回值存起来,然后在你的dll里面加个释放的函数。有必要这么纠结么
      

  3.   

    之前打算这么做的
    通过EnumWindowsProcess(HWND handle,LPARAM parameter)的第二个参数
    为回调函数传进一个动态数组来存储钩子句柄
    想想觉得这么点事还要维护一个动态数组。而且回调函数里还要添加一个static局部
    来做计数器。这么冗。好像很挫。
    所以希望请教有没有前辈高人能想出更风骚的解决方案
      

  4.   


    我没理解你的意思。 我遍历桌面窗口 通过窗口类名定位  这里寻找的是YY。  我开10个YY 为每个YY安装一个钩子。   我没看出这代码怎么会为同一个线程安装多个钩子呢?   能不能详细解释一下? 我站的高度没你高 没看出来
      

  5.   

    记得当年学编程的时候第一天老师就准备10道智力题就是那些火柴棍和几何图形 大家都懂的 结果我就答对1题 老师对我说你做不了一个合格的程序员 还是放弃吧 来到CSDN发现 原来我想不到的 很多人也同样想不到