unity 实现发布win平台无边框以及窗口置顶
时间:2019-02-20
本文章向大家介绍unity 实现发布win平台无边框以及窗口置顶,主要包括unity 实现发布win平台无边框以及窗口置顶使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近需要用到win平台无边框以及窗口置顶,并且可以给用户自己配置窗口大小,多说无益放代码:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Diagnostics;
using UnityEngine;
using System.Xml.Serialization;
public class WinMod : MonoBehaviour
{
public Rect screenRect;
[DllImport("User32.dll")]
private static extern IntPtr SetWindowLong(IntPtr hwnd, int _nIndex, int dwNewLong);
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("User32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
public static extern bool SetForegroundWindow(IntPtr hWnd);//设置此窗体为活动窗体
// not used rigth now
//const uint SWP_NOMOVE = 0x2;
//const uint SWP_NOSIZE = 1;
//const uint SWP_NOZORDER = 0x4;
//const uint SWP_HIDEWINDOW = 0x0080;
private const uint SWP_SHOWWINDOW = 0x0040;
private const int GWL_STYLE = -16;
private const int WS_BORDER = 1;
private const string folder = "/WinXML/";
private const string file = "win.xml";
private const int defaultWidth = 1280;
private const int defaultHeight = 720;
private IntPtr handler;
private void Start()
{
#if !UNITY_EDITOR
string name = Application.productName;
handler = FindWindow(null, name);
if (handler == IntPtr.Zero){
handler = GetForegroundWindow();
}
SetForegroundWindow(handler);
SetWindowLong(handler, GWL_STYLE, WS_BORDER);
CreateDirectory(Application.streamingAssetsPath + folder);
ScreenInfo info = LoadXml(Application.streamingAssetsPath + folder + file);
bool result = SetWindowPos(handler, -1, (int)info.posX, (int)info.posY, (int)info.width, (int)info.height, SWP_SHOWWINDOW);
#endif
}
private void CreateDirectory(string path)
{
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
}
private ScreenInfo LoadXml(string path)
{
ScreenInfo info;
if (File.Exists(path))
{
//TODO 文件存在 加载XML
string text = File.ReadAllText(path);
StringReader sr = new StringReader(text);
XmlSerializer ser = new XmlSerializer(typeof(ScreenInfo));
info = (ScreenInfo)ser.Deserialize(sr);
sr.Close();
}
else
{
//TODO 文件不存在 创建XML
info = new ScreenInfo()
{
height = screenRect.height == 0 ? defaultHeight : screenRect.height,
width = screenRect.width == 0 ? defaultWidth : screenRect.width,
posX = screenRect.x,
posY = screenRect.y
};
XmlSerializer ser = new XmlSerializer(typeof(ScreenInfo));
StringWriter sw = new StringWriter();
ser.Serialize(sw, info);
sw.Close();
string text = sw.ToString();
File.WriteAllText(path, text);
}
return info;
}
}
[Serializable]
public class ScreenInfo
{
public float width;
public float height;
public float posX;
public float posY;
}
直接将脚本挂在场景中就行,第一次运行时候会自动创建streamingAssets文件夹 并且下面自动创建一个xml文件,
xml文件可以配置窗口大小以及窗口位置.有用处 点个赞 新人博主 谢谢
- 段落首字下沉
- 【编程基础】C语言指针、引用和取值
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
- JavaScript中的this详解
- 使用SpringBoot开发REST服务
- CSS3 -webkit-filter 滤镜
- Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果
- Javascript中的Label语句
- 从编辑距离、BK树到文本纠错
- iframe基本知识及iframe版本Tab切换
- switch语句以及与if的比较
- kgtemp文件转mp3工具
- AJAX原理与步骤
- 【编程基础】C语言FILE结构体以及缓冲区深入探讨
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel定时任务的每秒执行代码
- PHP学习记录之面向对象(Object-oriented programming,OOP)基础【类、对象、继承等】
- Python通过zookeeper实现分布式服务代码解析
- laravel 实现向公共模板中传值 (view composer)
- PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】
- laravel 解决crontab不执行的问题
- PHP+Redis开发的书签案例实战详解
- Python持续监听文件变化代码实例
- laravel框架如何设置公共头和公共尾
- PHP结合Redis+MySQL实现冷热数据交换应用案例详解
- 浅谈Laravel模板实体转义带来的坑
- Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
- PHP大文件切割上传功能实例分析
- laravel Task Scheduling(任务调度)在windows下的使用详解
- PHP 7.4中使用预加载的方法详解