Skip to main content
 首页 » 资源教程 » Unity3D教程

UnityPc端最大化实现

2016年09月26日 19:10:185830蛮牛网

大家好,我是云图。最近做项目的时候碰到一个需求,就是在我们VR程序中调用外部的程序,当外部程序使用完成后又重新调用咱们unity的程序,

   有点像HtcVive 的The Lab 维修机器人那块,现在我们的需求明确了,但是我在实现的时候发现有些问题,比如unity调用了外部程序后,外部程序使用完,再返回unity的时候unity却已经不在最前置窗口了,那我们怎么让unity重新最大化呢?  网上找了好久都没有unity能用的办法,最终还是用c#的最大化做出来了,做个小例子分享给大家。

   首先我们在程序先打开外部程序,具体这个外部程序是什么就随意了。然后再开一条协同,倒计时十秒后再让咱们unity程序重新置顶回来。看看代码实现

[C#] 纯文本查看 复制代码

?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
    void Start () {
    Application.OpenURL("Out.exe"); //调用外部程序 把自己全屏挤掉
    StartCoroutine("CheckPic");  //开始10秒后 把自己全屏
    }
private int time = 10;
public IEnumerator CheckPic()
{
    while (true)
    {
        time--;
        if (time <= 0)
        {
            //时间到,窗口在最前端并且最大化
            OpenMain();
        }
        yield return new WaitForSeconds(1f);
    }
}


UnityPc端最大化实现 Unity3D教程 第1张


图中的MaxTest 就是我们的unity程序 Out.exe就是外部调用程序, 现在就是调用外部程序后 unity被挤掉的画面,然后我们来实现让unity重新最大化置顶回来。

[C#] 纯文本查看 复制代码

?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
[DllImport("user32.dll")]
  public static extern bool ShowWindow(System.IntPtr hwnd, int nCmdShow);
  [DllImport("user32.dll", EntryPoint = "GetForegroundWindow")]
  public static extern System.IntPtr GetForegroundWindow();
  [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
  public static extern int SetForegroundWindow(int hwnd);
  ///   ///   ///   ///   ///   ///   ///   ///   ///   ///   ///   ///
  [DllImport("User32.dll", EntryPoint = "FindWindow")]
  private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  [DllImport("User32.dll", EntryPoint = "FindWindowEx")]
  private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);

先声明一个User32.dll    然后在写一个全屏最大化的方法

[C#] 纯文本查看 复制代码

?

1
2
3
4
5
private void OpenMain()
    {
        ShowWindow(GetForegroundWindow(), 4);
        IntPtr hWnd = FindWindow(null"MaxTest");  
        ShowWindow(hWnd, 4);
    }

这里需要注意的是 IntPtr hWnd = FindWindow(null, "MaxTest");的MaxTest  这里写unity窗口句柄名字,如果不知道是什么那看看配置 写productName的内容。

然后在协同里面 过10秒后 我们的unity就会重新被置顶回来了


UnityPc端最大化实现 Unity3D教程 第2张


有了这个我们还可以做很多有意思的小功能,比如浏览器的一些 老板键,你懂的 


UnityPc端最大化实现 Unity3D教程 第3张


最后提供下里面的源码,最大化和最小化都基本差不多,更换个参数就行了,需要的朋友可以下载看看  

----------------------------------------------

最后在加一点说明 

nCmdShow的含义

0    关闭窗口

1    正常大小显示窗口

2    最小化窗口

3    最大化窗口

4    强制最大化并在最前端

ShowWindow(hWnd, 4); 这里就是我们可以修改的参数地方

下载地址: MaxTest.zip

评论列表暂无评论
发表评论