我目前正在这样做,如下所示:
// _Container is the panel that the program is to be displayed in.
System.Diagnostics.Process procTest = new System.Diagnostics.Process();
procTest.StartInfo.FileName = "TEST.EXE";
procTest.StartInfo.CreateNoWindow = false;
procTest.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
procTest.Start();
procTest.WaitForInputIdle();
SetParent(procTest.MainWindowHandle, _Container.Handle);
MoveWindow(procTest.MainWindowHandle,
0, 0, _Container.Width, _Container.Height, true);
我在这段代码中遇到的问题是,一旦更改MainWindowHandle,应用程序UI的某些部分将无法正常运行(即:按钮缺少文本)。
有没有一种方法可以在不导致停靠的应用程序出现问题的情况下进行此操作? (通过.net还是user32)?
最佳答案
首先,与其简单地等待1.5秒,不如尝试调用procTest.
WaitForInputIdle
以等待其消息循环释放。你已经是
通常,如果不修改您托管的程序,我认为不可能做到这一点。
编辑:您可以通过从任务栏隐藏,删除其标题栏,在程序移动时移动它,来使其他程序保持在宿主区域上方。我建议您尝试寻找其他选择。
尝试与第三方应用程序的原始开发人员联系,并征求他们的意见。