菜鸟诚恳请教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方法去拦截消息,现在就是拦截不到,请教各位大大了为什么拦截不到呢.....
BEGIN_MESSAGE_MAP(CSCDemoDlg, CDialog)
ON_REGISTERED_MESSAGE(nReplyMsg, OnReply)
END_MESSAGE_MAP()
然后在OnReply中获取dll的消息返回小弟现在是用使用java的第三方jnative调用该dll,无法使用ON_REGISTERED_MESSAGE,只能间接的调用user32.dll的GetMessageA方法去拦截消息,现在就是拦截不到,请教各位大大了为什么拦截不到呢.....
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,获取不到消息.............
如果这个消息使用的是内SendMessage,就不会进入队列, GetMessage也取不到
是应该是同一个线程吧,我那个java代码是在一个类中执行的,调用dll的初始化方法,然后捕获dll传递的消息
至于内SendMessage,我就不懂了