2

我目前这样做如下:


// _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)?

4

1 回答 1

1

首先,与其简单地等待 1.5 秒,不如尝试调用procTest.WaitForInputIdle等待它的消息循环空闲。 你已经是了。

一般来说,我认为如果不修改您托管的程序就不可能做到这一点。

编辑:您可以尝试通过隐藏任务栏、删除其标题栏、在您的程序移动时移动它等来将其他程序保持在您的托管区域之上。但是,这仍然不能完美地工作;我建议您尝试找到一些替代方案。

尝试联系第三方应用程序的原始开发人员并征求他们的意见。

于 2009-09-16T20:58:45.120 回答