我试图让我的 C# 表单在第三方应用程序中正确地作为父级,我拥有我希望我的表单作为父级的控件的句柄,但似乎无法让它工作。
替代文字 http://img693.imageshack.us/img693/8871/examplec.jpg
我想创建我的表单,使其成为 MDIClient 的一部分,句柄 005E0ED6。就像窗口 01D7157D。
这可能吗?如果是这样,它可以在 C# 中完成吗?
我试图让我的 C# 表单在第三方应用程序中正确地作为父级,我拥有我希望我的表单作为父级的控件的句柄,但似乎无法让它工作。
替代文字 http://img693.imageshack.us/img693/8871/examplec.jpg
我想创建我的表单,使其成为 MDIClient 的一部分,句柄 005E0ED6。就像窗口 01D7157D。
这可能吗?如果是这样,它可以在 C# 中完成吗?
你是如何尝试的?你试过SetParent吗?请参阅以下 StackOverflow 问题,看看它是否有帮助。使用 SetParent 将 HWND 嵌入到外部进程中
这段代码似乎工作:
[DllImport("user32.dll")]
private static extern
IntPtr GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll")]
private static extern
IntPtr AttachThreadInput(IntPtr idAttach, IntPtr idAttachTo, int fAttach);
WinAPI.SetParent(this.Handle, otherappshandle);
IntPtr otherprocessID = GetWindowThreadProcessId(otherappshandle, new IntPtr(0));
IntPtr threadID = new IntPtr(AppDomain.GetCurrentThreadId());
AttachThreadInput(threadID , otherprocessID , 1);
祝你好运。我沿着那条路走了下去,发现有足够的小恼人的陷阱,我最终放弃了。
SetParent() 之类的东西会让你部分地到达那里,但是就整个系统(消息泵阻塞等)而言,有很多小问题需要注意,这只会让它成为一个时间槽。
尤其是使用 WinForms,我强烈建议您只在主进程中运行您的 UI(如果可以的话),如果您想在另一个进程中隔离您的处理,请改为这样做。