unity 读取外部exe程序控制台信息

Posted 三页菌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 读取外部exe程序控制台信息相关的知识,希望对你有一定的参考价值。

由于需要获取显卡信息,但是unity的自带函数,只能输出1个显卡

c#倒是可以但是引用了一个下载的dll   System.Management.dll

这个dll放到unity用不了,因为mono不支持

所以先用vs写个外部exe程序

using System;
using System.Management;

public class Sample
{
    public static void Main(string[] args)
    {
        string Gname = "";

        ManagementObjectSearcher objvide = new ManagementObjectSearcher("select * from Win32_VideoController");

        foreach (ManagementObject obj in objvide.Get())
        {
            Gname += ("Name - " + obj["Name"] + "</br>");
            //System.Console.WriteLine("Name - " + obj["Name"] + "</br>");
            //System.Console.WriteLine("DeviceID - " + obj["DeviceID"] + "</br>");
            //System.Console.WriteLine("AdapterRAM - " + obj["AdapterRAM"] + "</br>");
            //System.Console.WriteLine("AdapterDACType - " + obj["AdapterDACType"] + "</br>");
            //System.Console.WriteLine("Monochrome - " + obj["Monochrome"] + "</br>");
            //System.Console.WriteLine("InstalledDisplayDrivers - " + obj["InstalledDisplayDrivers"] + "</br>");
            //System.Console.WriteLine("DriverVersion - " + obj["DriverVersion"] + "</br>");
            //System.Console.WriteLine("VideoProcessor - " + obj["VideoProcessor"] + "</br>");
            //System.Console.WriteLine("VideoArchitecture - " + obj["VideoArchitecture"] + "</br>");
            //System.Console.WriteLine("VideoMemoryType - " + obj["VideoMemoryType"] + "</br>");

            //Console.WriteLine("=====================================================");
        }


        Console.WriteLine(Gname);
        Console.WriteLine("=====================================================");
        //Console.ReadKey();
    }
}

然后生成运行下

Unity代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;

public class GetSystemInfo : MonoBehaviour {

    string a = "";

    // Use this for initialization
    void Start () {


        //这种方法可以
        GetStr();

        //这种方法也可以
        //OpenEXE("C://Users/zts/source/repos/ConsoleApp9/ConsoleApp9/bin/Debug/ConsoleApp9.exe", "");
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="_exePathName">路径</param>
    /// <param name="_exeArgus">启动参数</param>
    public void OpenEXE(string _exePathName, string _exeArgus)
    {
        try
        {
            Process myprocess = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo(_exePathName, _exeArgus);
            myprocess.StartInfo = startInfo;
            myprocess.StartInfo.CreateNoWindow = true;
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.StartInfo.RedirectStandardOutput = true;
            //myprocess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            myprocess.Start();
            a += myprocess.StandardOutput.ReadLine();//只能读取1行
            UnityEngine.Debug.Log(a);
            myprocess.WaitForExit();
        }
        catch (Exception ex)
        {
            UnityEngine.Debug.Log("出错原因:" + ex.Message);
        }
    }

    public void GetStr()
    {
        try
        {
            Process proc = new Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "C://Users/zts/source/repos/ConsoleApp9/ConsoleApp9/bin/Debug/ConsoleApp9.exe";
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardOutput = true;
            //proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;//这句会让unity卡死
            proc.Start();
            string fingerprint = proc.StandardOutput.ReadLine();
            UnityEngine.Debug.Log(fingerprint);
            proc.WaitForExit();
        }
        catch (Exception)
        {

            throw;
        }

    }

    /********************************unity获取设备信息*******************************/
    string systemInfo;
    public void GetUnityInfo()
    {
        systemInfo = "\tTitle:当前系统基础信息:\n设备模型:" + SystemInfo.deviceModel + "\n设备名称:" + SystemInfo.deviceName + "\n设备类型:" + SystemInfo.deviceType +
            "\n设备唯一标识符:" + SystemInfo.deviceUniqueIdentifier + "\n显卡标识符:" + SystemInfo.graphicsDeviceID +
            "\n显卡设备名称:" + SystemInfo.graphicsDeviceName + "\n显卡厂商:" + SystemInfo.graphicsDeviceVendor +
            "\n显卡厂商ID:" + SystemInfo.graphicsDeviceVendorID + "\n显卡支持版本:" + SystemInfo.graphicsDeviceVersion +
            "\n显存(M):" + SystemInfo.graphicsMemorySize + "\n显卡像素填充率(百万像素/秒),-1未知填充率:" + SystemInfo.graphicsPixelFillrate +
            "\n显卡支持Shader层级:" + SystemInfo.graphicsShaderLevel + "\n支持最大图片尺寸:" + SystemInfo.maxTextureSize +
            "\nnpotSupport:" + SystemInfo.npotSupport + "\n操作系统:" + SystemInfo.operatingSystem +
            "\nCPU处理核数:" + SystemInfo.processorCount + "\nCPU类型:" + SystemInfo.processorType +
            "\nsupportedRenderTargetCount:" + SystemInfo.supportedRenderTargetCount + "\nsupports3DTextures:" + SystemInfo.supports3DTextures +
            "\nsupportsAccelerometer:" + SystemInfo.supportsAccelerometer + "\nsupportsComputeShaders:" + SystemInfo.supportsComputeShaders +
            "\nsupportsGyroscope:" + SystemInfo.supportsGyroscope + "\nsupportsImageEffects:" + SystemInfo.supportsImageEffects +
            "\nsupportsInstancing:" + SystemInfo.supportsInstancing + "\nsupportsLocationService:" + SystemInfo.supportsLocationService +
            "\nsupportsRenderTextures:" + SystemInfo.supportsRenderTextures + "\nsupportsRenderToCubemap:" + SystemInfo.supportsRenderToCubemap +
            "\nsupportsShadows:" + SystemInfo.supportsShadows + "\nsupportsSparseTextures:" + SystemInfo.supportsSparseTextures +
            "\nsupportsStencil:" + SystemInfo.supportsStencil + "\nsupportsVertexPrograms:" + SystemInfo.supportsVertexPrograms +
            "\nsupportsVibration:" + SystemInfo.supportsVibration + "\n内存大小:" + SystemInfo.systemMemorySize;
    }
    void OnGUI()
    {
        GUILayout.Label(systemInfo);
    }
    /************************************************************************/

    // Update is called once per frame
    void Update () {
        
    }
}

缺陷:这种读取只能读取控制台的1行数据,当然你可以把数据集中起来,一行输出

不知道有没有其他办法可以获取多行控制台信息

以上是关于unity 读取外部exe程序控制台信息的主要内容,如果未能解决你的问题,请参考以下文章

怎么通过程序控制unity3d人物动作

如何在unity3d发布好的程序中导入外部文件?

Unity启动外部程序(Process)

分享一下遍历Animator获取信息和精准控制动画播放的代码In Unity Editor

Unity编程Unity动画系统

Unity-打开另一个exe可执行程序并传入参数