我用CBT钩子监视系统所有的对话框或窗口的出现
回调函数的代码如下:
LRESULT __declspec(dllexport) CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) 
{

    if (nCode < 0)  // do not process message 
        return CallNextHookEx(hkb, nCode, wParam, lParam); 
if (nCode==HCBT_CREATEWND)//有窗口或对话框创建
{              Handle[Count]=(HWND)wParam;//记录其句柄
     Count++;
         }
   return CallNextHookEx(hkb, nCode, wParam, lParam); 
}
然后运行notepad打开一个文本文档,Handle中有四条记录,分别为aaaaaaaaa,bbbbbbbbb,ccccccccc,ddddddddd,用spy++跟踪这个文本文档窗口,发现其由两个窗口构成,一个是菜单,其句柄为aaaaaaaaa,另一个edit文本编辑区,其句柄为ccccccccc,但是在CBT钩子还记录了两个句柄bbbbbbbbb,ddddddddd就不知是何物了?请大家指教!

解决方案 »

  1.   

    WH_CBT Hook    在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:
        1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;
        2. 完成系统指令;
        3. 来自系统消息队列中的移动鼠标,键盘事件;
        4. 设置输入焦点事件;
        5. 同步系统消息队列事件。bbbbbbbbb,ddddddddd是不是激活和建立事件?
      

  2.   

    不可能啊,有这个条件if (nCode==HCBT_CREATEWND)限制了只是创建窗口才记录啊
      

  3.   

    根据你那个贴子~
    你在共享数据段的设置中把Count初始化了没有?
    会不会是这里的问题~
      

  4.   

    HCBT_CREATEWND A window is about to be created. The system calls the hook procedure before sending the WM_CREATE or WM_NCCREATE message to the window. If the hook procedure returns a nonzero value, the system destroys the window; the CreateWindow function returns NULL, but the WM_DESTROY message is not sent to the window. If the hook procedure returns zero, the window is created normally. 还有~MSDN上如是说~我想可能是还有WM_NCCREATE 这个消息~
      

  5.   

    Count初试化了
    结果绝对是这样的!