我的要求很低,只要拦截自己程序中多个子窗口的WM_LBUTTONDBLCLK消息,帮忙!

解决方案 »

  1.   

    我有spy++中文帮助,可以发给你看看
      

  2.   

    ftp://202.112.81.47/Programming/Document/Tools/spy++.chm
    有spy++中文帮助下载.你的问题可以解决.你自己看看.
    要在这里回答,写的太多了
      

  3.   

    我会用spy++,
    我的意思是如何像spy++一样拦截指^定^窗^口^的消息,不是进程也不是系统。
      

  4.   

    呵呵,系统是微软的,ide也是微软的,在自己的地盘上做事,很容易嘛!我也觉得是钩子的作用。
      

  5.   

    SetWindowsHookEx (spy have source in msn sdk sample)
      

  6.   

    我最后用SetWindowLong实现了,这里和大家讨论一下:
    先用SetWindowLong将指定窗口消息发送到自己定义的一个函数
    原型如下:
    LRESULT CALLBACK MyWindowProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );然后在该函数中可以拦截(过滤)掉指定消息,其它的消息可以用
    CallWindowProc函数再交还给原处理函数进行处理。spy呢,我想至少可以这么做,但它未过滤任何消息,只是做了Message Log的工作,也就是将所有消息发回原消息处理函数进行处理。
      

  7.   

    你可以用API函数啊!!如GETCLASSNAME等函数!!具体的请在官方网站查找!!
      

  8.   

    msdn的sample中有spy++的源代码,在sample/sdk/sdktools下,你可以参考一下
      

  9.   

    TPoint MousePoint;
      char Handles[255];
      HWND hWnds;
      int x;
      GetCursorPos(&MousePoint);
    //GetHandle
      hWnds=WindowFromPoint(MousePoint);
      Edit1->Text=IntToStr((int)hWnds);
      if(Edit1->Text=="")  return;
      GetWindowText(hWnds,Handles,255);
      Edit3->Text=(AnsiString)Handles;
      GetClassName(hWnds, Handles, 255);
      Edit4->Text=(AnsiString)Handles;
      DrawRect(hWnds);
      for (int i=0;i<10000;i++)
      Application->ProcessMessages();
      DrawRect(hWnds);看看这个,或许有用!
    BCB中兄弟的经典代码!