有两个进程,他们进程通信可能不是sendMessage怎么捕捉它们之间的消息呢?spy++好像只能捕捉窗口消息,我想知道他们之间传递的消息。

解决方案 »

  1.   

    “进程间消息”这一说法还是头一次听说。消息是发给线程的,线程是进程的执行体,spy++可以抓到属于某个线程后窗体的消息,但是消息从哪儿而来,是其他进程发送过来的,还是操作系统内核根据设备输入转换而来的,我觉得这个不重要。反正,有些事情用文字解释起来太难了。建议你先深入理解一下windows的消息系统,或许就不会提这样的问题了。
      

  2.   

    自己写个user32.dll放到两个程序所在目录下。这个user32.dll对系统的user32.dll的导出函数进行包装(内部调用原始导出函数),并对以下函数进行特殊处理
    SendMessage, PostMessage, PostThreadMessage, RegisterWindowMessage, SendDlgItemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessage这些函数都是发消息的函数。
    所谓“特殊处理”是这样的:
    比如SendMessage,第一个参数是目标窗口句柄h,取目标窗口所在进程id:
    GetWindowThreadProcessId(h, pid),
    如果当前进程id: GetCurrentProcessId 不等于 上面的pid,就表示是他们进程间的通信(假设两程序只是互相发消息,没向第三个程序发消息)。这种情况下就可以打印消息的日志到文件了!!!再调用系统user32.dll的原始导出函数即可(保证原始代码的执行)!!!
      

  3.   

    纠错:RegisterWindowMessage不是发消息的函数