菜鸟诚恳请教dll消息拦截问题dll与mfc窗口间是消息通讯,mfc窗口调用代码如下:UINT nReplyMsg = RegisterWindowMessage("Reply Message");
BEGIN_MESSAGE_MAP(CSCDemoDlg, CDialog)
  ON_REGISTERED_MESSAGE(nReplyMsg, OnReply)
END_MESSAGE_MAP()
然后在OnReply中获取dll的消息返回小弟现在是用使用java的第三方jnative调用该dll,无法使用ON_REGISTERED_MESSAGE,只能间接的调用user32.dll的GetMessageA方法去拦截消息,现在就是拦截不到,请教各位大大了为什么拦截不到呢.....

解决方案 »

  1.   

    检查一下GetMessageA的窗口句柄对不对,GetMessageA有没有循环调用
      

  2.   

    你的OnReply函数如何实现的?用GetMessageA方法去拦截消息也拦截不到么?
      

  3.   

    先非常感谢楼上两位的答复,
    c++中的OnReply方法是这样的,我调试了下,可以调用到
    LRESULT CSCDemoDlg::OnReply(WPARAM wParam, LPARAM lParam)java方法是这样的:使用了jnative                        nReplyMsg = User32.RegisterWindowMessage("SCDemo Reply Message");
    System.out.println("nReplyMsg = " + nReplyMsg);
    hwnd = User32.GetForegroundWindow();
    System.out.println("hwnd = " + hwnd.getValue());

    n = new JNative("SC.dll", "SCInit");
    n.setRetVal(Type.INT);
    Pointer pointer = new SC_InitAsk().getInitAskData();
    n.setParameter(0, pointer);
    System.out.println("pointer.getSize() = " + pointer.getSize());
    n.setParameter(1, pointer.getSize());
    n.invoke(); // 调用方法
    System.out.println("getRetVal = " + n.getRetVal());
    while (true) {
    //捕获消息
    System.out.println("开始捕获消息...");
    int message = User32.GetMessage(msg, hwnd, 0, 99999);
                            }代码就停在User32.GetMessage,获取不到消息.............
      

  4.   

    GetMessage 是从队列获取消息, 并且是当前线程, 如果不是同一线程是没用的
    如果这个消息使用的是内SendMessage,就不会进入队列, GetMessage也取不到
      

  5.   


    是应该是同一个线程吧,我那个java代码是在一个类中执行的,调用dll的初始化方法,然后捕获dll传递的消息
    至于内SendMessage,我就不懂了