superowner原创,如有雷同,纯属搬运
本文的脚本,可以解决Unity隐藏主窗口后,后台异常高CPU占用
思路就是窗口最小化,然后隐藏任务栏快捷图标,当然进一步可以显示到托盘
网上的教程有的是隐藏Unity主窗口,当然有可能出bug,换个思路不就行了
隐藏其实和最小化差不多,也是一样在后台运行,可能一些api和Unity运行机制冲突
当我这样就不会冲突
部分函数ShowWindow,GetActiveWindow以及参数,可以到MSDN查阅或谷歌
当然,最好不要用百度(程序员不友好),不错,我就是蔑视百度
咱优雅的程序媛就是要用简书写文章
void Start()
{
WinApi.HideTaskbarIcon(WinApi.GetActiveWindow());
WinApi.ShowWindow(WinApi.GetActiveWindow(), WinApi.SW_MINIMIZE);
}
void OnDisable()
{
//test
#if UNITY_EDITOR
WinApi.ShowTaskbarIcon(WinApi.GetActiveWindow());
WinApi.ShowWindow(WinApi.GetActiveWindow(), WinApi.SW_SHOW);
#endif
}
//--------------------
//快捷图标隐藏,superowner原创:
public static readonly long WS_EX_APPWINDOW = 0x00040000L;
public static readonly long WS_EX_TOOLWINDOW = 0x00000080L;
public static bool HideTaskbarIcon(IntPtr m_hWnd)
{
ShowWindow(m_hWnd, SW_HIDE);
var lStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);
lStyle &= ~WS_EX_APPWINDOW;
lStyle |= WS_EX_TOOLWINDOW;
SetWindowLong(m_hWnd, GWL_EXSTYLE, lStyle);
return ShowWindow(m_hWnd, SW_SHOW);
}
public static bool ShowTaskbarIcon(IntPtr m_hWnd)
{
ShowWindow(m_hWnd, SW_HIDE);
var lStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);
lStyle &= ~WS_EX_TOOLWINDOW;
lStyle |= WS_EX_APPWINDOW;
SetWindowLong(m_hWnd, GWL_EXSTYLE, lStyle);
return ShowWindow(m_hWnd, SW_SHOW);
}
然后是外部启动Unity Release后的exe代码
启动参数参照:https://www.jianshu.com/p/1f0683ddfc44,当然你可以不用
class Program
{
static void Main(string[] args)
{
Process p = new Process();
p.StartInfo.FileName = @"C:\UnityProject\CMD\Build\CMD.exe";
p.StartInfo.Arguments = "妹妹就是爱asd";
p.StartInfo.UseShellExecute = false;
//p.StartInfo.RedirectStandardInput = true;
//p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
//System.Diagnostics.Process.Start(@"C:\UnityProject\CMD\Build\CMD.exe", "妹妹就是爱asd");
}
}
网友评论