Unity3D启动外部程序并传递参数的实现
作者:NRE 发布时间:2021-12-10 07:10:59
之前开发项目,一直都使用的是外壳程序加子程序的模式,通过外壳程序去启动子程序,外壳程序和子程序之间的通信,是使用配置文件完成的。
我总觉得这样通信很麻烦,因为外壳程序需要对配置文件进行更改和写入,然后子程序又要读取信息。而且整合的时候,会导致有很多配置文件,而且需要对路径做很多处理和限制。
我发现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里接收参数,设置窗口位置以及大小。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://www.cnblogs.com/xiaoyulong/p/10979367.html


猜你喜欢
- 前言缓存技术被认为是减轻服务器负载、降低网络拥塞、增强Web可扩展性的有效途径之一,其基本思想是利用客户访问的时间局部性(Temproral
- 本文实例为大家分享了SpringBoot整合BCrypt实现密码加密的具体代码,供大家参考,具体内容如下一. 首先在pom依赖中加入依赖:&
- Handler的定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI.解释: 当应用程序启动时,Android首先会开启一个主线程
- 工具栏:就是上面有个好多的快捷按钮的那个栏,比如撤销,上传,下载设置,扳手按钮,等等。目录栏:就是刚刚装的时候,这个会显示,但是不知道怎么关
- 首先创建一个工具类import android.annotation.TargetApi;import android.app.Activi
- 1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修
- 本文实例为大家分享了Java实现简单的飞机大战游戏,控制主飞机的具体代码,供大家参考,具体内容如下接着上一篇:Java实现简单的飞机大战游戏
- 最近公司在新版本上有一个需要,要在首页添加一个滑动效果,具体就是仿照X宝的商品详情页,拉到页面底部时有一个粘滞效果,如下图X东的商品详情页,
- 本文实例讲述了C#使用oledb操作excel文件的方法。分享给大家供大家参考。具体分析如下:不管什么编程语言都会提供操作Excel文件的方
- 前言异步调用几乎是处理高并发,解决性能问题常用的手段,如何开启异步调用?SpringBoot中提供了非常简单的方式,就是一个注解@Async
- Sequence序列Sequence 是Kotlin标准库提供的一种容器类型。它和Iterable一样具备对集合进行多步骤操作能力,但是却是
- 这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 一、之前旧的写法class Singleton{ private Singleton() {} &nb
- java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,这次好好总结一下。理论先拙劣的表达一下jvm虚拟内存分布:程序计数器是j
- 1.SpringBoot整合JDBCTemplate1.1.导入jdbc相关依赖包主要的依赖包:<dependency> &nb
- C#实现修改文件的创建、修改和访问时间方法,主要是用到了File类的SetCreationTime、SetLastWriteTime、Set
- 本文我将要介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和hibern
- 多态性1理解多态性:可以理解为一个事物的多种形态。2何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)3多态的
- 在这里,我们将用到finish(),简单介绍一下它的使用:finish()官方解析:Call this when your activity
- 1. 前言Spring的核心技术IOC(Intorol of Converse控制反转)的实现途径是DI(dependency Insert