2

我试图让我的 C# 表单在第三方应用程序中正确地作为父级,我拥有我希望我的表单作为父级的控件的句柄,但似乎无法让它工作。

替代文字 http://img693.imageshack.us/img693/8871/examplec.jpg

我想创建我的表单,使其成为 MDIClient 的一部分,句柄 005E0ED6。就像窗口 01D7157D。

这可能吗?如果是这样,它可以在 C# 中完成吗?

4

3 回答 3

2

你是如何尝试的?你试过SetParent吗?请参阅以下 StackOverflow 问题,看看它是否有帮助。使用 SetParent 将 HWND 嵌入到外部进程中

于 2010-03-08T02:58:15.960 回答
1

这段代码似乎工作:

    [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);
于 2010-03-08T03:41:57.377 回答
0

祝你好运。我沿着那条路走了下去,发现有足够的小恼人的陷阱,我最终放弃了。

SetParent() 之类的东西会让你部分地到达那里,但是就整个系统(消息泵阻塞等)而言,有很多小问题需要注意,这只会让它成为一个时间槽。

尤其是使用 WinForms,我强烈建议您只在主进程中运行您的 UI(如果可以的话),如果您想在另一个进程中隔离您的处理,请改为这样做。

于 2010-03-08T03:51:02.707 回答