Unity发布PC平台exe的窗口花样(WindowsAPI、捕获关闭事件、隐藏窗口标题栏、隐藏最小化最大化关闭按钮等等)
文章目录
- 一、前言
- 二、创建脚本
- 三、代码
- 四、赋值脚本的按钮成员
- 五、打包运行测试
一、前言
游戏项目是使用Unity
开发的,发布了PC
平台的exe
。
然后策划提出这么一个需求:
可否让玩家点击窗口的关闭按钮的时候不关闭程序,而是执行最小化。
说实话,这样做不是很厚道,不过,技术上是可以实现的。
本文实现的效果如下:
二、创建脚本
创建一个WindowsStyle
脚本,挂到场景的某个物体上,比如我挂到Main Camera
上。
三、代码
using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;public class WindowsStyle : MonoBehaviour
{public Button hideBarBtn;public Button showBarBtn;public Button hideCloseBtn;public Button showCloseBtn;private void Awake(){// 获得窗口句柄var hwd = GetForegroundWindow();// 隐藏标题栏hideBarBtn.onClick.AddListener(() =>{var wl = GetWindowLong(hwd, GWL_STYLE);wl &= ~WS_CAPTION;SetWindowLong(hwd, GWL_STYLE, wl);});// 显示标题栏showBarBtn.onClick.AddListener(() =>{var wl = GetWindowLong(hwd, GWL_STYLE);wl |= WS_CAPTION;SetWindowLong(hwd, GWL_STYLE, wl);});// 隐藏关闭按钮hideCloseBtn.onClick.AddListener(() =>{var wl = GetWindowLong(hwd, GWL_STYLE);wl &= ~WS_SYSMENU;SetWindowLong(hwd, GWL_STYLE, wl);});// 显示关闭按钮showCloseBtn.onClick.AddListener(() =>{var wl = GetWindowLong(hwd, GWL_STYLE);wl |= WS_SYSMENU;SetWindowLong(hwd, GWL_STYLE, wl);});}/// <summary>/// 点击窗口的x按钮,会执行这个函数/// </summary>private void OnApplicationQuit(){Application.wantsToQuit += () =>{// 获得窗口句柄var hwd = GetForegroundWindow();// 设置窗口最小化ShowWindow(hwd, SW_SHOWMINIMIZED);// 阻止程序被关闭return false;};}[DllImport("user32.dll")]public static extern IntPtr GetForegroundWindow();[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hwd, int cmdShow);[DllImport("user32.dll")]public static extern long GetWindowLong(IntPtr hwd, int nIndex);[DllImport("user32.dll")]public static extern void SetWindowLong(IntPtr hwd, int nIndex, long dwNewLong);/// <summary>/// 最小化/// </summary>const int SW_SHOWMINIMIZED = 2;/// <summary>/// 最大化/// </summary>const int SW_SHOWMAXIMIZED = 3;/// <summary>/// 还原/// </summary>const int SW_SHOWRESTORE = 1;/// <summary>/// 窗口风格/// </summary>const int GWL_STYLE = -16;/// <summary>/// 标题栏/// </summary>const int WS_CAPTION = 0x00c00000;/// <summary>/// 标题栏按钮/// </summary>const int WS_SYSMENU = 0x00080000;
}
四、赋值脚本的按钮成员
使用UGUI
创建四个按钮,赋值给脚本的按钮成员对象。
五、打包运行测试
发布PC
平台的exe
。
发布成功后,运行测试效果如下:
Unity发布PC平台exe的窗口花样(WindowsAPI、捕获关闭事件、隐藏窗口标题栏、隐藏最小化最大化关闭按钮等等)相关推荐
- Unity发布PC平台,接入微信开放平台网页应用,扫码登录不拉起浏览器直接显示二维码在UI上
文章目录 一.前言 二.登录微信开放平台,申请网页应用 三.抓取授权二维码原理 四.测试 五.核心代码 六.补充:如何知道用户扫码成功 一.前言 Unity发布PC平台,如果在PC平台想要使用微信登录 ...
- 银河麒麟文件夹命令行窗口最小化最大化关闭按钮消失
银河麒麟服务器的文件夹命令行窗口最小化最大化关闭按钮消失且窗口只能重叠不能交替 执行命令 1.将窗口管理器置为marco gsettings set org.mate.session.required ...
- Unity 3D PC平台发布|| Unity 3D Web 平台发布||Unity 3D Android平台发布
Unity 3D PC平台发布 PC 是最常见的游戏运行平台. 随着欧美游戏的崛起,PC 平台随之发生游戏登陆大潮. 在 PC 平台上发布游戏的步骤: 打开要发布的 Unity 3D 工程,执行 Fi ...
- unity学习 — 关于Unity发布PC端程序,窗口最大化并带有任务栏的实现
关于Unity发布PC端,程序运行充满整个屏幕并带有窗口任务栏 一:简单介绍 二:一个脚本解决问题 支持 一:简单介绍 1,用Unity打包发布PC程序,有时候不充满整个屏幕,感觉效果不好,需要在打开 ...
- Unity 发布IOS平台并部署到真机上测试的方法
准备 Mac OS系统 使用Unity做IOS开发,需要一台苹果系统的电脑,如果没有,那就用虚拟机或者安装黑苹果吧,虽然Windows版Unity也可以跨平台发布IOS,但是问题多的让你怀疑人生. 虚 ...
- Unity发布Android平台错误记录
Unity发布Android平台错误记录 (1)Cannot parse project property android.enableR8='' of type 'class java.lang.S ...
- 点击弹出窗口外任意地方关闭弹出窗口
问:如何在点击弹出窗口外其他地方时关闭弹出窗口? 答:使用FlexMouseEvent'sMOUSE_DOWN_OUTSIDE事件.用户点击弹出窗口的外部时,会分发此事件.只需要在popUpWindo ...
- VC按最小化、关闭按钮、Esc都隐藏主窗口
VC按最小化.关闭按钮.Esc键都隐藏主窗口,在托盘处程序图标的右键菜单中点击,显示主窗口. 1. 按最小化时隐藏主窗口:为窗口添加WM_SIZE消息响应函数 void CdDlg::OnSize(U ...
- WinFom解决最小化最大化后重绘窗口造成闪烁的问题
WinFom解决最小化最大化后重绘窗口造成闪烁的问题 参考文章: (1)WinFom解决最小化最大化后重绘窗口造成闪烁的问题 (2)https://www.cnblogs.com/swobble/p/ ...
最新文章
- 腾讯视频招GNN方向实习生啦~
- 聚类分析案例:探究用户对物品类别的喜好细分降维
- 检测、分割用什么轻量级网络呢?
- 报名即将关闭丨AAAI 2020论文预讲会
- MapReduce编程基础
- JDK 13中的JEP 355文本块
- 笔记 英语二 考研先导课 0126
- 【XSY2307】树的难题
- Epub2基础知识介绍
- 运用R语言绘制火山图
- Ubuntu 修改IP地址
- linux 软防火墙 DDOS,Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战
- 关注流浪猫:从我们出发
- iOS修复字符串中 有\n 不换行的问题
- mysql全文索引与停止词
- laravel 验证码一直提示不正确的问题
- Excel导入导出以及导出压缩文件
- 通过ID获得链接地址
- 【HTML基础】HTML的基本结构
- java科学计数法转正常的数字