首页 > 解决方案 > Process.Start() 多次传递相同的参数?

问题描述

我有以下代码(如下),它在 Steam 上启动游戏并将一个参数传递给它。然后游戏连接到多人服务器,它可以工作,但是,我想知道是否有一种方法可以传递相同的参数,而无需一次又一次地打开相同的程序。

我尝试使用循环(while),但是,它并没有很好地工作,因为 Process.Start() 也多次启动了同一个程序。

    private void JoinS3(object sender, RoutedEventArgs e)
    {
        string arg = "-connect=164.132.202.63:2302";
        Process.Start(FileData.GetSteamFolderPath, arg);
    }

有没有其他方法可以将参数传递到已经打开的进程中?

标签: c#

解决方案


Process.Start 类似于双击 exe 文件。

您可以在启动程序时传递参数。如果程序正在运行,它必须以某种方式读取这些额外的输入。

一个简单的示例游戏:

public class MyGame
{
    public static void Main(string[] args) // Here our Exe-Args are delivered to our program..
    {
        // Some dummycode to show what is done with your Args..
        if (args != null && args.Length > 0)
        {
            string server = args.Where(a => a.StartsWith("-connect")).Select(s => s.Split(':').Last()).FirstOrDefault();
            if (server != null)
                ConnectToServer(server); // when starting with a "-connect" your game is stuck in this method.
        }

        // this will not be executed, because we are alread in the game, after "ConnectToServer()"
        ShowGameIntro();
        StartMainMenu();
    }
}

如果你用“-connect:...”运行这个“游戏”,程序将“卡在”函数“ConnectToServer()”中。它不会要求你提供更多的论据。现在游戏负责做事。游戏可以通过听键盘或鼠标来询问用户输入,但你不能强迫它这样做。并且这些输入不必与开始游戏时接受的开始参数有关。

大多数游戏都有控制台。在那里你可以删除一些命令。

Counter-Strike 示例:如果您在服务器上,您可以通过按 ^ 打开控制台并键入以下命令:

connect 192.168.0.1
disconnect
connect 192.168.0.1
disconnect
connect 192.168.0.1
disconnect

这会做你想做的事。如果这是您想要做的,您应该阅读如何为您的游戏编写脚本。在此之后,您应该问自己如何发送这些命令。但这是另一个问题;-)


推荐阅读