一、前言
嗨,大家好,我是新发。最近有这么个需求,Unity
发布Windows
平台版本,需要在游戏中启动另一个exe
。
可以使用Process.Start
,可以参见我之前写的这篇文章:《Unity中C#如何执行cmd命令(System.Diagnostics.Process的使用)》
今天呢,我要介绍另外一种方式:通过Windows API
的ShellExecute
方法来打开某个exe
,支持带中文参数不乱码,支持打开文件夹。
二、Windows API: ShellExecute
函数原型:
[DllImport("shell32.dll", CharSet=CharSet.Unicode)]
public static extern int ShellExecute(IntPtr hwnd, string lpszOp, string lpszFile,
string lpszParams, string lpszDir, int FsShowCmd);
引入命名空间
using System;
using System.Runtime.InteropServices;
using UnityEngine;
注意CharSet
设置为CharSet.Unicode
,否则路径或参数带中文会出现乱码,导致出错。
三、使用例子
1、打开文件夹
var dir = "F:\\KuGou\\KGMusic\\";
ShellExecute(IntPtr.Zero, "open", dir, "", 1);
2、打开exe
比如打开酷狗,并自动播放蔡健雅的红色高跟鞋。
var exePath = "F:\\KuGou\\KGMusic\\KuGou.exe";
var args = "/Open \"F:\\Programs\\KuGou\\蔡健雅 - 红色高跟鞋.mp3\"";
ShellExecute(IntPtr.Zero, exePath, args, 1);
执行某个python
脚本。
var workdir= "D:\\py_pro\\";
ShellExecute(IntPtr.Zero, "python", workdir + "test.py", workdir, 1);
更多例子:
// 打开记事本
ShellExecute(IntPtr.Zero, "notepad", 1);
// 打开计算器
ShellExecute(IntPtr.Zero, "calc", 1);
// 打开注册表
ShellExecute(IntPtr.Zero, "regedit", 1);
// 打开画图板
ShellExecute(IntPtr.Zero, "mspaint", 1);
// 打开写字板
ShellExecute(IntPtr.Zero, "write", 1);
// 打开任务管理器
ShellExecute(IntPtr.Zero, "taskmgr", 1);
// 打开事件查看器
ShellExecute(IntPtr.Zero, "eventvwr", 1);
// 打开Windows版本信息
ShellExecute(IntPtr.Zero, "winver", 1);
// 发邮件
ShellExecute(IntPtr.Zero, "mailto: 123456789@qq.com", 1);
四、演示
演示一下效果吧。
代码如下:
using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;
public class OpenExeTest : MonoBehavIoUr
{
public InputField inputField;
public Button btn;
[DllImport("shell32.dll", CharSet=CharSet.Unicode)]
public static extern int ShellExecute(IntPtr hwnd, string lpszParams, int FsShowCmd);
void Start()
{
btn.onClick.AddListener(() =>
{
ShellExecute(IntPtr.Zero, inputField.text, 1);
});
}
}
完毕。
喜欢Unity
的同学,不要忘记点击关注,如果有什么Unity
相关的技术难题,也欢迎留言或私信~
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。