更好的方法在Windows.forms面板中“停靠”运行应用程序的第三方?

时间:2009-09-16 20:44:26

标签: c# winapi user32

我目前正在执行以下操作:


// _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 个答案:

答案 0 :(得分:1)

首先,不要只是等待1.5秒,而是尝试调用procTest. WaitForInputIdle等待其消息循环空闲。你已经是。

一般情况下,如果不修改您正在托管的程序,我认为不可能这样做。

编辑:您可以尝试将其他程序保留在您的托管区域之上,方法是隐藏在任务栏中,删除其标题栏,在程序移动时移动它等等。但是,这仍然不会工作得很完美;我建议您尝试寻找替代方案。

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