我在 Unity 中有一段代码,它使用
process.Start()
打开另一个 exe 文件。
进程开始后,我将获取主窗口句柄并尝试设置位置和窗口大小。
这是我的代码:
Process process = new Process();
process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
process.StartInfo.FileName = "someApp.exe"
process.StartInfo.Arguments = "SomeArgs";
process.Start();
UpdateProcessWindow(process);
private void UpdateProcessWindow(Process process)
{
//Waits for 10 seconds
if (process.WaitForInputIdle(10 * 1000))
{
IntPtr hwnd = process.MainWindowHandle;
SetForegroundWindow(hwnd);
MoveWindow(hwnd, 500, 500, 1000, 500, true);
}
}
在关闭该进程之前,如果我手动修改了该窗口的大小,那么每次启动该进程时,大小都会设置为手动编辑的大小/位置。 我想始终以 1000 宽度和 500 高度开始该过程。
我不确定我在这里缺少什么。
任何建议都会有很大帮助。
谢谢!
在Unity中,您可以尝试使用Screen.SetResolution方法来设置游戏窗口的分辨率。以下是如何修改代码以实现此目的的示例:
using UnityEngine;
using System.Diagnostics;
public class ProcessManager: MonoBehaviour
{
void Start()
{
StartExternalProcess();
}
void StartExternalProcess()
{
Process process = new Process();
process.StartInfo.FileName = "someApp.exe";
process.StartInfo.Arguments = "SomeArgs";
process.Start();
// Wait for the process to become idle
process.WaitForInputIdle();
// Set the resolution of the game window
Screen.SetResolution(1000, 500, false);
// Optionally, you can set the position of the game window as //well
//Screen.fullScreen = false;
//Screen.SetResolution(1000, 500, false);
}
}
在本例中,Screen.SetResolution用于将游戏窗口的分辨率设置为1000x500。注意,设置分辨率直接影响Unity中的游戏窗口大小,这种方式一般用于Unity应用程序。
如果您想控制外部进程的窗口大小,您使用的方法(MoveWindow)应该可行。但是,请记住,行为可能会根据外部应用程序的不同而有所不同。某些应用程序可能会覆盖其窗口的大小和位置设置。
如果 MoveWindow 方法未按预期工作,您可能需要调查正在启动的外部应用程序的行为。此外,请确保在进程空闲且主窗口句柄有效后调用 MoveWindow。
请记住在代码中适当处理错误和边缘情况。