Unity定時開啟/關閉外部程式
阿新 • • 發佈:2018-11-26
轉載地址: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的例子: