文章目录

  • 一、前言
  • 二、创建脚本
  • 三、代码
  • 四、赋值脚本的按钮成员
  • 五、打包运行测试

一、前言

游戏项目是使用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、捕获关闭事件、隐藏窗口标题栏、隐藏最小化最大化关闭按钮等等)相关推荐

  1. Unity发布PC平台,接入微信开放平台网页应用,扫码登录不拉起浏览器直接显示二维码在UI上

    文章目录 一.前言 二.登录微信开放平台,申请网页应用 三.抓取授权二维码原理 四.测试 五.核心代码 六.补充:如何知道用户扫码成功 一.前言 Unity发布PC平台,如果在PC平台想要使用微信登录 ...

  2. 银河麒麟文件夹命令行窗口最小化最大化关闭按钮消失

    银河麒麟服务器的文件夹命令行窗口最小化最大化关闭按钮消失且窗口只能重叠不能交替 执行命令 1.将窗口管理器置为marco gsettings set org.mate.session.required ...

  3. Unity 3D PC平台发布|| Unity 3D Web 平台发布||Unity 3D Android平台发布

    Unity 3D PC平台发布 PC 是最常见的游戏运行平台. 随着欧美游戏的崛起,PC 平台随之发生游戏登陆大潮. 在 PC 平台上发布游戏的步骤: 打开要发布的 Unity 3D 工程,执行 Fi ...

  4. unity学习 — 关于Unity发布PC端程序,窗口最大化并带有任务栏的实现

    关于Unity发布PC端,程序运行充满整个屏幕并带有窗口任务栏 一:简单介绍 二:一个脚本解决问题 支持 一:简单介绍 1,用Unity打包发布PC程序,有时候不充满整个屏幕,感觉效果不好,需要在打开 ...

  5. Unity 发布IOS平台并部署到真机上测试的方法

    准备 Mac OS系统 使用Unity做IOS开发,需要一台苹果系统的电脑,如果没有,那就用虚拟机或者安装黑苹果吧,虽然Windows版Unity也可以跨平台发布IOS,但是问题多的让你怀疑人生. 虚 ...

  6. Unity发布Android平台错误记录

    Unity发布Android平台错误记录 (1)Cannot parse project property android.enableR8='' of type 'class java.lang.S ...

  7. 点击弹出窗口外任意地方关闭弹出窗口

    问:如何在点击弹出窗口外其他地方时关闭弹出窗口? 答:使用FlexMouseEvent'sMOUSE_DOWN_OUTSIDE事件.用户点击弹出窗口的外部时,会分发此事件.只需要在popUpWindo ...

  8. VC按最小化、关闭按钮、Esc都隐藏主窗口

    VC按最小化.关闭按钮.Esc键都隐藏主窗口,在托盘处程序图标的右键菜单中点击,显示主窗口. 1. 按最小化时隐藏主窗口:为窗口添加WM_SIZE消息响应函数 void CdDlg::OnSize(U ...

  9. WinFom解决最小化最大化后重绘窗口造成闪烁的问题

    WinFom解决最小化最大化后重绘窗口造成闪烁的问题 参考文章: (1)WinFom解决最小化最大化后重绘窗口造成闪烁的问题 (2)https://www.cnblogs.com/swobble/p/ ...

最新文章

  1. 腾讯视频招GNN方向实习生啦~
  2. 聚类分析案例:探究用户对物品类别的喜好细分降维
  3. 检测、分割用什么轻量级网络呢?
  4. 报名即将关闭丨AAAI 2020论文预讲会
  5. MapReduce编程基础
  6. JDK 13中的JEP 355文本块
  7. 笔记 英语二 考研先导课 0126
  8. 【XSY2307】树的难题
  9. Epub2基础知识介绍
  10. 运用R语言绘制火山图
  11. Ubuntu 修改IP地址
  12. linux 软防火墙 DDOS,Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战
  13. 关注流浪猫:从我们出发
  14. iOS修复字符串中 有\n 不换行的问题
  15. mysql全文索引与停止词
  16. laravel 验证码一直提示不正确的问题
  17. Excel导入导出以及导出压缩文件
  18. 通过ID获得链接地址
  19. 【HTML基础】HTML的基本结构
  20. java科学计数法转正常的数字

热门文章

  1. ADS-B及雷达显示终端8.0
  2. java获取指定日期的所在周的第一天(周一)
  3. PTA - 数据库合集16
  4. 51单片机STC 89C52RC进阶 – 自制8x8点阵、点亮单颗LED、显示点阵汉字
  5. 开发工具---Eclipse 教程Ⅰ
  6. eos 区块链 java 开发_EOS区块链用什么语言开发?
  7. ConcurrentHashMap源码解读
  8. Cool Edit Pro 2.0 Resample.xfm
  9. 数据库 实验8 视图
  10. pyspark运行加速方法思考(一)