亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Unity3D啟動(dòng)外部程序并傳遞參數(shù)的實(shí)現(xiàn)

 更新時(shí)間:2021年04月13日 09:59:28   作者:NRE  
這篇文章主要介紹了Unity3D啟動(dòng)外部程序并傳遞參數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

之前開(kāi)發(fā)項(xiàng)目,一直都使用的是外殼程序加子程序的模式,通過(guò)外殼程序去啟動(dòng)子程序,外殼程序和子程序之間的通信,是使用配置文件完成的。

我總覺(jué)得這樣通信很麻煩,因?yàn)橥鈿こ绦蛐枰獙?duì)配置文件進(jìn)行更改和寫(xiě)入,然后子程序又要讀取信息。而且整合的時(shí)候,會(huì)導(dǎo)致有很多配置文件,而且需要對(duì)路徑做很多處理和限制。

我發(fā)現(xiàn)Process.Start()函數(shù)中,是可以傳遞參數(shù)的。

也就是說(shuō),我們是可以在使用Process.Start()函數(shù)啟動(dòng)外部程序時(shí),傳遞參數(shù)的進(jìn)行通信的。

具體操作如下:

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

需要注意的是,如果存在多個(gè)參數(shù)的話,參數(shù)之間需要使用空格進(jìn)行分隔。

外殼程序已經(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ù)信息,打印在了一個(gè)Text上面。運(yùn)行效果圖如下:

補(bǔ)充:Unity3D:?jiǎn)?dòng)外部exe傳參以及設(shè)置窗口位置和大小

好久沒(méi)有更新博客了,最近項(xiàng)目上沒(méi)有太大的突破,也沒(méi)有涉及到新東西,所以想寫(xiě)博客,但是無(wú)奈沒(méi)有新東西,好在最近有點(diǎn)新的功能要做,之前也做過(guò),但是并沒(méi)有整理成博客,現(xiàn)在就記錄一下。省的還要去百度找。(最近好像新的Unity版本不能破解了,官網(wǎng)有時(shí)候也上不去,不知道Unity要搞什么東東。)

今天要說(shuō)的是Unity啟動(dòng)外部exe,并且傳遞參數(shù),改變外部exe窗口位置以及窗口大小。啟動(dòng)exe這個(gè)百度搜一大堆,主要是怎么設(shè)置窗口位置及大小。窗口大小的方法Unity有自己的方法,但是位置就沒(méi)法設(shè)置了,我今天用的方法是Windows原生的方法。需要引用user32.dll。

廢話不多說(shuō)了,下面上代碼

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()
    {
        //啟動(dòng)時(shí)傳過(guò)來(lái)的string數(shù)組,下標(biāo)為0的是啟動(dòng)的外部exe程序的完整路徑,下標(biāo)為1及之后的參數(shù)是想要傳過(guò)來(lái)的參數(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()
    {
        //啟動(dòng)外部exe程序,第一個(gè)參數(shù)為exe完整路徑,第二個(gè)參數(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里啟動(dòng)一個(gè)exe,在Awake里接收參數(shù),設(shè)置窗口位置以及大小。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

最新評(píng)論