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

StackOverflow https://stackoverflow.com/questions/1435358

  •  07-07-2019
  •  | 
  •  

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


// _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 等待其消息循环空闲。你已经是。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top