使用 C# (Unity) 设置进程的窗口大小

问题描述 投票:0回答:1

我在 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 高度开始该过程。

我不确定我在这里缺少什么。

任何建议都会有很大帮助。

谢谢!

c# unity-game-engine user32
1个回答
0
投票

在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。

请记住在代码中适当处理错误和边缘情况。

© www.soinside.com 2019 - 2024. All rights reserved.