处理来自其他进程的窗口的消息

我正在开发一个C#WPF应用程序,通过调用Win32 SetParent()来修复另一个应用程序的主窗口。 这个进程外子窗口的句柄被一个名为FormHost的类包装,这个类是从HwndHost派生的。 除了一件事情之外,所有工作都很好:重新窗口化窗口的消息不会传递给FormHost。 MSDN文档明确指出,HwndHost窗口过程WndProc()不能用于进程外窗口。 另外,MessageHook也不起作用。 我也尝试调用AttachThreadInput()来结合两个窗口的input处理。 没有运气。 有什么build议么?

Solutions Collecting From Web of "处理来自其他进程的窗口的消息"

重新设置窗口的过程不能直接子类化进程外窗口的消息过程。 它必须将自己的窗口过程代码注入到窗口拥有进程的地址空间中,在该地址空间内对窗口进行子类化,然后根据需要最终使用您选择的IPC机制来传回重新建立过程。

对于实际的注射,您可以:

1)将实际的窗口过程代码放入DLL中,使用CreateRemoteThread()将DLL加载到窗口的拥有进程中,然后让DLL的DllEntryPoint()子类化窗口(必须将HWND句柄存储在全局内存中所以DLL可以找到它)。

2)通过使用VirtualAllocEx()和WriteProcessMemory(),将实际的窗口过程代码放入窗口拥有进程的地址空间内分配的内存块中,然后使用CreateRemoteThread()来使用该内存块执行窗口的实际子类作为窗口程序。