Unity 定時開啟/關閉外部應用


  自從加入工作的隊伍里,博客都荒廢了,今天周末,難得清靜,寫篇博客!剛才看到了Process類,隨手寫了個小demo.給大家分享下!

首先大家要對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.將腳本掛到攝像機上即可。

4.Ctrl+P走你!

 

檢查當前打開的進程(系統應用除外),獲取到之后,怎么操作It's up to you!

5,接着看受否可以啟動外部應用,我就以酷我音樂盒為例吧!

還真的打開了啊!

6,試試關閉它吧。

 

真的關了,再次打開。

 

再試試定時關閉,1分鍾測試時間!

已經OK了吧!

下面簡單的看下代碼,主要就有這幾個方法:

大家可以自己去擴充方法!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM