Unity3D啟動外部程序并傳遞參數(shù)的實現(xiàn)
之前開發(fā)項目,一直都使用的是外殼程序加子程序的模式,通過外殼程序去啟動子程序,外殼程序和子程序之間的通信,是使用配置文件完成的。
我總覺得這樣通信很麻煩,因為外殼程序需要對配置文件進行更改和寫入,然后子程序又要讀取信息。而且整合的時候,會導致有很多配置文件,而且需要對路徑做很多處理和限制。
我發(fā)現(xiàn)Process.Start()函數(shù)中,是可以傳遞參數(shù)的。

也就是說,我們是可以在使用Process.Start()函數(shù)啟動外部程序時,傳遞參數(shù)的進行通信的。
具體操作如下:
public void StartEXE()
{
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.FileName = "C:/Users/Administrator/Desktop/Test/Demo.exe";
processStartInfo.Arguments = "啟動 程序 1 2 3";
Process.Start(processStartInfo);
}
需要注意的是,如果存在多個參數(shù)的話,參數(shù)之間需要使用空格進行分隔。
外殼程序已經(jīng)傳遞了參數(shù),那么子程序如何接受參數(shù)呢?具體操作如下:
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];
}
}
我將所有的參數(shù)信息,打印在了一個Text上面。運行效果圖如下:

補充:Unity3D:啟動外部exe傳參以及設(shè)置窗口位置和大小
好久沒有更新博客了,最近項目上沒有太大的突破,也沒有涉及到新東西,所以想寫博客,但是無奈沒有新東西,好在最近有點新的功能要做,之前也做過,但是并沒有整理成博客,現(xiàn)在就記錄一下。省的還要去百度找。(最近好像新的Unity版本不能破解了,官網(wǎng)有時候也上不去,不知道Unity要搞什么東東。)
今天要說的是Unity啟動外部exe,并且傳遞參數(shù),改變外部exe窗口位置以及窗口大小。啟動exe這個百度搜一大堆,主要是怎么設(shè)置窗口位置及大小。窗口大小的方法Unity有自己的方法,但是位置就沒法設(shè)置了,我今天用的方法是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數(shù)組,下標為0的是啟動的外部exe程序的完整路徑,下標為1及之后的參數(shù)是想要傳過來的參數(shù)。
string[] args = Environment.GetCommandLineArgs();
var winInfo = JsonUtility.FromJson<WinInfo>(args[1]);
// 設(shè)置屏大小和顯示位置
SetWindowPos(GetForegroundWindow(), 0, winInfo.x, winInfo.y, winInfo.width, winInfo.height, 0x0040);
}
// Use this for initialization
void Start()
{
//啟動外部exe程序,第一個參數(shù)為exe完整路徑,第二個參數(shù)為要傳入的參數(shù)。
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;
}
}
上面的代碼里我傳的參數(shù)是json格式的,在Start里啟動一個exe,在Awake里接收參數(shù),設(shè)置窗口位置以及大小。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
C#如何利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進行解析
這篇文章主要為大家詳細介紹了C#利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進行解析,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
C#利用WinForm實現(xiàn)查看指定目錄下所有圖片功能
Windows 窗體是用于生成 Windows 桌面應(yīng)用的 UI 框架, 它提供了一種基于 Visual Studio 中提供的可視化設(shè)計器創(chuàng)建桌面應(yīng)用的高效方法,本文介紹了C#利用WinForm實現(xiàn)可以查看指定目錄文件下所有圖片功能,需要的朋友可以參考下2024-05-05
用C#+Selenium+ChromeDriver爬取網(wǎng)頁(模擬真實的用戶瀏覽行為)
這篇文章主要介紹了用C#+Selenium+ChromeDriver爬取網(wǎng)頁,模擬真實的用戶瀏覽行為,需要的小伙伴可以參考一下2022-01-01
C# Distinct和重寫IEqualityComparer時要知道的二三事
這篇文章主要給大家介紹了關(guān)于C# Distinct和重寫IEqualityComparer時要知道的二三事,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06
C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的實現(xiàn)方法
這篇文章主要介紹了C++聯(lián)合體轉(zhuǎn)換成C#結(jié)構(gòu)的實現(xiàn)方法,需要的朋友可以參考下2014-08-08

