访问Unity3D创建的应用程序窗口的代码

时间:2014-12-24 03:41:37

标签: c# unity3d

无论如何

我是否可以访问创建Unity应用程序窗口的代码? 例如,在WPF中,您可以设置窗口的调整大小模式,最顶层,窗口启动状态等.MainWindow.cs继承自System.Window命名空间中的Window类,允许您设置所有这些内容。 我试图找到类似的类,它允许我在Unity3D中做同样的事情。

在WPF中

The MainWindow.cs in WPF (I'm trying to access to similar thing in Unity3D

Unity3D创建了应用程序窗口

The Unity3D created application window

1 个答案:

答案 0 :(得分:1)

对于后期跟进感到抱歉,但是这也是可能的。要获得此功能,您需要使用user32.dll。请记住,这是基于Windows的。

因为这只是windows standalone中的必需品,而且可能是统一编辑器,所以使用时需要

#if UNITY_STANDALONE_WIN || UNITY_EDITOR

现在你想使用user32.dll中给出的窗口位置,所以你们首先要从dll导入这个功能

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]

并将其绑定到变量

private static extern bool SetWindowPos(IntPtr hwnd, int hWndInsertAfterint x, int Y, int cx, int cy, int wFlags);

您还想找到可以以类似方式完成的窗口。但不要忘记改变当前的" WindowTitle"到你的实际窗口标题。

 [DllImport("user32.dll", EntryPoint = "FindWindow")]
 public static extern IntPtr FindWindow(System.String className, System.String windowName);

现在剩下的就是一个调用函数,所以你可以实际设置窗口的位置。这将是以下

public static void SetPosition(int x, int y, int resX = 0, int resY = 0) 
{
 SetWindowPos(FindWindow(null, "WindowTitle"), 0, x, y, resX, resY, resX * resY == 0 ? 1 : 0);
}

当然,不要忘记用

结束#if
#endif

现在你可以在Awake / OnEnable中调用Setposition函数,就像这样

void Awake()
{
    SetPosition(0,0);
}

其他功能,如调整大小可能会更具挑战性,但不应该是不可能的。您可以查看msdn windowFunctions以获取有关此

的更多信息

以防万一。这是窗口位置的全功能副本。只需将WindowModifier组件附加到gameObject,将窗口标题更改为相应的标题,以及您想要的位置

using UnityEngine;
using System;
using System.Collections;
using System.Runtime.InteropServices;

public class WindowModifier: MonoBehaviour 
{
    #if UNITY_STANDALONE_WIN || UNITY_EDITOR
    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    private static extern bool SetWindowPos(IntPtr hwnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
    [DllImport("user32.dll", EntryPoint = "FindWindow")]
    public static extern IntPtr FindWindow(System.String className, System.String windowName);
    public static void SetPosition(int x, int y, int resX = 0, int resY = 0) 
    {
        SetWindowPos(FindWindow(null, "My window title"), 0, x, y, resX, resY, resX * resY == 0 ? 1 : 0);
    }
    #endif

    void Awake () 
    {
        SetPosition(0,0);
    }
}