Skip to main content
 首頁 » 資源教程 » Unity3D教程

UnityPc端最大化實現

2016年09月26日 19:10:18939390蠻牛網

大家好,我是云圖。最近做項目的時候碰到一個需求,就是在我們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

評論列表暫無評論
發表評論