Unity3D启动外部程序并传递参数的实现

 更新时间:2021年04月13日 09:59:28   作者:NRE  
这篇文章主要介绍了Unity3D启动外部程序并传递参数的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

之前开发项目,一直都使用的是外壳程序加子程序的模式,通过外壳程序去启动子程序,外壳程序和子程序之间的通信,是使用配置文件完成的。

我总觉得这样通信很麻烦,因为外壳程序需要对配置文件进行更改和写入,然后子程序又要读取信息。而且整合的时候,会导致有很多配置文件,而且需要对路径做很多处理和限制。

我发现Process.Start()函数中,是可以传递参数的。

也就是说,我们是可以在使用Process.Start()函数启动外部程序时,传递参数的进行通信的。

具体操作如下:

public void StartEXE()
    {
        ProcessStartInfo processStartInfo = new ProcessStartInfo();
        processStartInfo.FileName = "C:/Users/Administrator/Desktop/Test/Demo.exe";
        processStartInfo.Arguments = "启动 程序 1 2  3";
        Process.Start(processStartInfo);
    }

需要注意的是,如果存在多个参数的话,参数之间需要使用空格进行分隔。

外壳程序已经传递了参数,那么子程序如何接受参数呢?具体操作如下:

private void Start()
    {
        string[] args = Environment.GetCommandLineArgs();
        text.text = args.Length.ToString();
        for (int i = 0; i < args.Length; i++)
        {
            text.text += "\n" + "Arg" + i + ":  " + args[i];
        }
    }

我将所有的参数信息,打印在了一个Text上面。运行效果图如下:

补充:Unity3D:启动外部exe传参以及设置窗口位置和大小

好久没有更新博客了,最近项目上没有太大的突破,也没有涉及到新东西,所以想写博客,但是无奈没有新东西,好在最近有点新的功能要做,之前也做过,但是并没有整理成博客,现在就记录一下。省的还要去百度找。(最近好像新的Unity版本不能破解了,官网有时候也上不去,不知道Unity要搞什么东东。)

今天要说的是Unity启动外部exe,并且传递参数,改变外部exe窗口位置以及窗口大小。启动exe这个百度搜一大堆,主要是怎么设置窗口位置及大小。窗口大小的方法Unity有自己的方法,但是位置就没法设置了,我今天用的方法是Windows原生的方法。需要引用user32.dll。

废话不多说了,下面上代码

using UnityEngine;
using System.Runtime.InteropServices;
using System;
using System.Diagnostics; 
public class ProperWindows : MonoBehaviour
{
    [DllImport("user32.dll")]
    static extern IntPtr SetWindowLong(IntPtr hWnd, int _nIndex, int dwNewLong);
    [DllImport("user32.dll")]
    static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
    [DllImport("user32.dll")]
    static extern IntPtr GetForegroundWindow(); //获取最前端窗体句柄
    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    //[DllImport("user32.dll")]
    //static extern IntPtr GetWindowThreadProcessld(); 
    private void Awake()
    {
        //启动时传过来的string数组,下标为0的是启动的外部exe程序的完整路径,下标为1及之后的参数是想要传过来的参数。
        string[] args = Environment.GetCommandLineArgs();
        var winInfo = JsonUtility.FromJson<WinInfo>(args[1]);
        // 设置屏大小和显示位置
        SetWindowPos(GetForegroundWindow(), 0, winInfo.x, winInfo.y, winInfo.width, winInfo.height, 0x0040);
    }
    // Use this for initialization
    void Start()
    {
        //启动外部exe程序,第一个参数为exe完整路径,第二个参数为要传入的参数。
        string winInfo = JsonUtility.ToJson(new WinInfo(0, 0, 1000, 500));
        Process.Start(@"C:\Users\wangbo\Desktop\2\2.exe", winInfo);
    } 
    // Update is called once per frame
    void Update()
    { 
    }
}
[Serializable]
public class WinInfo
{
    public int x;
    public int y;
    public int width;
    public int height;    
    public WinInfo(int x, int y, int width, int height)
    {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }
}

上面的代码里我传的参数是json格式的,在Start里启动一个exe,在Awake里接收参数,设置窗口位置以及大小。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • AnyChat的视频会议程序实例详解

    AnyChat的视频会议程序实例详解

    AnyChat是一款跨平台的音视频解决方案。通过本篇文章给大家介绍AnyChat的视频会议程序,涉及到anychat相关知识,对anychat视频会议相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • C#中整理了几种字符串截取方法小结

    C#中整理了几种字符串截取方法小结

    本文给大家整理了几种字符串截取方法, (Substring);(Remove);(Replace)方法和split方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • 使用C#改善代码质量的技巧和实践

    使用C#改善代码质量的技巧和实践

    本文将通过多个编程技巧和实践,展示如何显著改善代码质量,以 C# 为例,结合 卫语句、枚举、字典映射、单一职责原则 等技巧,逐步优化代码,感兴趣的小伙伴跟着小编一起来看看吧
    2025-03-03
  • C# OCR实现文字识别功能

    C# OCR实现文字识别功能

    OCR,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。本文将利用OCR实现文字识别功能,感兴趣的可以了解一下
    2022-11-11
  • C#文件流进行压缩和解压缩的方法

    C#文件流进行压缩和解压缩的方法

    这篇文章主要介绍了C#文件流进行压缩和解压缩的方法,涉及C#文件流操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#使用Aspose.Cells创建和读取Excel文件

    C#使用Aspose.Cells创建和读取Excel文件

    这篇文章主要为大家详细介绍了C#使用Aspose.Cells创建和读取Excel文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 一文带你快速学会C#中WinForm框架的使用详解

    一文带你快速学会C#中WinForm框架的使用详解

    WinForm是一门非常经济实惠的技术,就是说,可以在短时间内学会,并迅速借此进行项目开发。本文就来和大家聊聊WinForm框架的使用方法,希望对大家有所帮助
    2023-02-02
  • C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    这篇文章主要介绍了C#实体对象序列化成Json并让字段的首字母小写的两种方法,在这两种方法中小编比较推荐使用第二种方法,需要的朋友可以参考下
    2018-06-06
  • C#中使用Override和New关键字进行版本控制

    C#中使用Override和New关键字进行版本控制

    在 C# 中,override 和 new 关键字用于控制类之间的成员方法的隐藏和重写,理解它们之间的差异和使用场景对于设计灵活且易于维护的代码至关重要,在这篇博客中,我们将详细探讨这两个关键字的用法,并通过示例来说明它们的实际应用,需要的朋友可以参考下
    2024-10-10
  • C#使用semaphore来管理异步下载请求的方法

    C#使用semaphore来管理异步下载请求的方法

    这篇文章主要介绍了C#使用semaphore来管理异步下载请求的方法,涉及C#使用semaphore实现多线程管理的技巧,需要的朋友可以参考下
    2015-06-06

最新评论