如何从 C# 应用程序控制停靠在侧面板中的统一进程?

问题描述 投票:0回答:0
        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);

Test Image

这是我的应用程序代码和原型 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 运行但一旦失去焦点我就无法控制它。我仍然不知道为什么。有解决办法吗?

c# unity3d devexpress
© www.soinside.com 2019 - 2024. All rights reserved.