1. 程式人生 > >Unity定時開啟/關閉外部程式

Unity定時開啟/關閉外部程式

轉載地址:https://www.cnblogs.com/wuzhang/p/wuzhang20151031.html

首先大家要對Process類有一些簡單的瞭解,參考資料:https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process%28v=vs.110%29.aspx 如果有興趣可以深入學習。

1,開啟Uinity 建一新工程。

2.建立指令碼檔案 CallApplication.cs

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

public class CallApplication : MonoBehaviour
{

    // Use this for initialization
    private static string outputPath = "D:/kuwo/kuwomusic/8.0.3.0_BCS30/KwMusic.exe";
    private int x = 0, y = 0;
    private bool isOn = false;
    private int minute = 0;

    // Use this for initialization
    void Start()
    {
        //ListAllAppliction();
        UnityEngine.Debug.Log("當前應用:" + Process.GetCurrentProcess().ProcessName + " 程序ID: " + Process.GetCurrentProcess().Id);
    }
    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 200, 50), "開啟外部應用"))
        {
            if (CheckProcess("kwmusic"))
                return;
            else
                StartProcess(outputPath);
        }
        if (GUI.Button(new Rect(10, 60, 200, 50), "殺死應用程序"))
        {
            KillProcess("kwmusic");
        }
        if (GUI.Button(new Rect(10, 110, 200, 50), "開啟定時關閉"))
        {
            minute = System.DateTime.Now.Minute + 1;
            isOn = true;
        }
        if (isOn)
        {
            GUI.contentColor = Color.red;
            GUI.Label(new Rect(10, 160, 160, 30), "\t倒計時:" + (60 - System.DateTime.Now.Second));
            if (System.DateTime.Now.Minute == minute)
            {
                UnityEngine.Debug.Log("自動關閉應用....");
                KillProcess("kwmusic");
                isOn = false;
            }
        }
    }
    /// <summary>
    /// 開啟應用
    /// </summary>
    /// <param name="ApplicationPath"></param>
    void StartProcess(string ApplicationPath)
    {
        UnityEngine.Debug.Log("開啟本地應用");
        Process foo = new Process();
        foo.StartInfo.FileName = ApplicationPath;
        foo.Start();
    }

    /// <summary>
    /// 檢查應用是否正在執行
    /// </summary>
    bool CheckProcess(string processName)
    {
        bool isRunning = false;
        Process[] processes = Process.GetProcesses();
        int i = 0;
        foreach (Process process in processes)
        {
            try
            {
                i++;
                if (!process.HasExited)
                {
                    if (process.ProcessName.Contains(processName))
                    {
                        UnityEngine.Debug.Log(processName + "正在執行");
                        isRunning = true;
                        continue;
                    }
                    else if (!process.ProcessName.Contains(processName) && i > processes.Length)
                    {
                        UnityEngine.Debug.Log(processName + "沒有執行");
                        isRunning = false;
                    }
                }
            }
            catch (Exception ep)
            {
            }
        }
        return isRunning;
    }
    /// <summary>
    /// 列出已開啟的應用
    /// </summary>
    void ListAllAppliction()
    {
        Process[] processes = Process.GetProcesses();
        int i = 0;
        foreach (Process process in processes)
        {
            try
            {
                if (!process.HasExited)
                {
                    UnityEngine.Debug.Log("應用ID:" + process.Id + "應用名:" + process.ProcessName);
                }
            }
            catch (Exception ep)
            {
            }
        }
    }
    /// <summary>
    /// 殺死程序
    /// </summary>
    /// <param name="processName">應用程式名</param>
    void KillProcess(string processName)
    {
        Process[] processes = Process.GetProcesses();
        foreach (Process process in processes)
        {
            try
            {
                if (!process.HasExited)
                {
                    if (process.ProcessName == processName)
                    {
                        process.Kill();
                        UnityEngine.Debug.Log("已殺死程序");
                    }
                }
            }
            catch (System.InvalidOperationException)
            {
                //UnityEngine.Debug.Log("Holy batman we've got an exception!");
            }
        }
    }

}

3.將指令碼掛到攝像機上即可。

另分享兩個關於Process的例子:

https://www.cnblogs.com/Luffyhuang/p/4310827.html

https://blog.csdn.net/et19931118/article/details/52336526/