public MyForm()
{
InitializeComponent();
RunUnity();
myManager = new MemoryMapFileHandler("testMapName", "send", "recv", 512);
Thread readThread = new Thread(myManager.Read);
readThread.IsBackground = true;
readThread.Start();
}
public void RunUnity()
{
Process _unityProcess = new Process();
_unityProcess.StartInfo.FileName = @"C:\Users\test\Desktop\myTestProject\TestProject.exe";
_unityProcess.StartInfo.Arguments = "-parentHWND " + Unity_Panel.Handle.ToInt32();
_unityProcess.Start();
_unityProcess.WaitForInputIdle();
SetParent(_unityProcess.MainWindowHandle, Unity_Panel.Handle);
}
[DllImport("user32.dll")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
这是我的应用程序代码和原型 UI。 我想做的是,在 Unity 聚焦时控制它。
所以我通过 DevExpress.DockManager 制作了侧面板。 如您所见,它只有在开始时才能正常工作。 (只有在它启动之前我没有采取任何行动(鼠标单击、键盘按下或任何操作))但是当我单击另一个面板或进程或窗口时它立即变得无法控制,即使它仍在运行。我点击侧面板试图控制它,但它不起作用。
当我点击侧面板时,它聚焦到侧面板的 Dock_Container。 所以我当时认为这是焦点问题。但我现在不确定:(
我尝试了以下方法,但这些方法根本不起作用。
手动将单击处理程序附加到 Dock_Container,以在单击侧面板时将 Form.ActiveControl 更改为 Unity_Panel。
手动将单击处理程序附加到 Dock_Container 以在单击侧面板时调用 Unity_Panel.Focus()。
调用SetForegroundWindow(Unity_Panel.Handle)
将 MyForm 作为 MDIContainer。将空表单作为 MDI 子项并尝试在其中执行 Unity Process。
另外,当我使用记事本代替 Unity Process 时,它运行良好,并且可以在我与其他元素交互后再次控制。
所有尝试都失败了。 Unity Process 运行但一旦失去焦点我就无法控制它。我仍然不知道为什么。有解决办法吗?