Unity - Win平台修改窗口标题
主要是通过user32.dll获取窗口句柄, 和Unity没有什么关系
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
public class UnityEditorTitle
{
#region wrap
private delegate bool EnumThreadWindowsCallback(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll"]
public static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData);
[DllImport("user32.dll"]
public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId);
[DllImport("user32.dll"]
public static extern IntPtr GetWindow(HandleRef hWnd, int uCmd);
[DllImport("user32.dll"]
public static extern bool IsWindowVisible(HandleRef hWnd);
[DllImport("user32.dll")]
private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize);
[DllImport("user32.dll"]
private extern static int GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll"]
public extern static int SetWindowText(int hwnd, string lpString);
#endregion
#region singleton
private static UnityEditorTitle s_Instance;
public static UnityEditorTitle Instance
{
get
{
if (s_Instance == null)
{
s_Instance = new UnityEditorTitle();
}
return s_Instance;
}
}
#endregion
private int m_HWnd;
private bool m_HaveMainWindow;
private IntPtr m_MainWindowHandle;
private int m_ProcessId;
private string m_OriginalTitle;
private UnityEditorTitle()
{
m_ProcessId = Process.GetCurrentProcess().Id;
m_HWnd = GetMainWindowHandle();
StringBuilder sb = new StringBuilfer(255);
GetWindowText(m_HWnd, sb, 255);
m_OriginalTitle = sb.ToString();
}
public void SetText(string content)
{
SetWindowText(m_HWnd, content);
}
public void Recover()
{
SetWindowText(m_HWnd, m_OriginalTitle);
}
private int GetMainWindowHandle()
{
if (!m_HaveMainWindow)
{
m_MainWindowHandle = IntPtr.Zero;
var callback = new EnumThreadWindowsCallback(
(handle, ptr) => {
int num;
GetWindowThreadProcessId(new HandleRef(this, handle), out num);
if ((num == m_ProcessId) && IsMainWindow(handle))
{
m_MainWindowHandle = handle;
return false;
}
return true;
}
);
EnumWindows(callback, IntPtr.Zero);
GC.KeepAlive(callback);
m_HaveMainWindow = true;
}
return m_MainWindowHandle.ToInt32();
}
private bool IsMainWindow(IntPtr handle)
{
if (GetWindow(new HandleRef(this, handle), 4) != IntPtr.Zero)
{
return false;
}
return IsWindowVisible(new HandleRef(this, handle));
}
}
Unity - Win平台修改窗口标题的更多相关文章
- Win平台下窗口操作(Unity)
Unity发布在Win平台时, 可以通过user32.dll的方式与Win API通信, 最小化窗口代码: public static class DllImports { private const ...
- RMAN备份到共享存储失败(win平台)
RMAN备份到共享存储失败(win平台) 之前在<Win环境下Oracle小数据量数据库的物理备份>这篇文章中,介绍了在win平台下对于小数据量的数据库的物理备份设计. 文中重点提到,强烈 ...
- win平台搭建Lnmp环境
win10上面安装的phpStudy这些天有时候打不开网页 502,请求一直loading,就算是代码问题我也扶不住,安装个Redis,mongodb都超级麻烦,并且好多都模拟Linux做的东西,最终 ...
- win平台,apache通过web访问svn
上个月用php写一个在线打包lua变成luac,碰到个权限问题.pysvn无法更新.网上搜了好半天都找不到解决方法.最好还是自己解决了. 解决方法也很简单,找到aphache服务,提权限就行了.lin ...
- win pe 修改xp系统开机密码方法
今天使用win pe 修改了xp系统的密码,有三种方法 一 . 最终找到了一个方法,这个方法只能改写密码,也就是说会留下痕迹,如下: 1.使用的工具:FbinstTool v1.50 FbinstT ...
- Qt下如何修改文件的时间(全平台修改)
提供一个全平台修改文件的时间的方法,希望大家喜欢 /* UTIME.C: This program uses _utime to set the * file-modification time to ...
- 12.QT4.7.4-解决WIN平台和Linux平台中文乱码,QLineEdit右击菜单中文显示
1.解决Win平台中文显示 1.1首先解决win平台上中文显示乱码问题 1)首先查看qt creator的编码格式 通过->编辑->选择编码 查看. 2)如果qt creator的编码格式 ...
- Unity编辑器 - 资源修改立即写入磁盘AssetDataBase.SaveAssets()
Unity编辑器 - 资源修改立即写入磁盘AssetDataBase.SaveAssets() 在编写编辑器时,如果需要修改Unity序列化资源(如Prefab,美术资源,ScriptableObje ...
- 编译带libev和libuv的libwebsocket (Win平台)
编译使用libwebsockets-2.0-stable版本. 编译依赖项目cmake,lws项目配置和生成依赖python, gpy工具依赖gpy, libuv项目配置和生成依赖,又一个项目配置和生 ...
- Golang Web应用 创建docker镜像笔记(win 平台)
记录的是 本地编译好了再创建容器镜像的方法 ,这样子生成的镜像文件比较小,方便分发部署 win 平台需要设置golang交叉编译 生成linux可执行文件 CMD下: Set GOOS="l ...
随机推荐
- vue和servlet 前后端分离 (复习)
一.vue复习 1.vue的使用步骤: (1)导入vue.js (2)创建除body以外最大的div标签,给定id值 (3)创建vue对象 new Vue({ el:"#app", ...
- 解决连接MySQL,报错10061,系统错误5
mysql登录不上去,报错10061,百度后得,mysql服务未启动.. 方法一.选择dos窗口命令行打开mysql 输入代码 net start mysql 报错,如图所示.系统错误 5 解决办法: ...
- Linux 文件系统的设计
一 硬盘的最小存储单元是扇区,扇区大小为512B 文件系统将硬盘划分为固定大小的块(block),最常见的块大小为4KB 块是文件系统读写硬盘的最小单位 二 文件系统设计面临的基本问题: 用户怎么找到 ...
- Linux文件管理知识查找文件
Linux文件管理知识:查找文件 前几篇文章一一介绍了LINUX进程管理控制命令及网络层面的知识体系,综所周知,一个linux系统是由很多文件组成的,那么既然有那么多文件,那我们该如何管理这些文件呢? ...
- chrome浏览器中使用adblockplus拦截广告
adblock plus是一款可以屏蔽广告以及任何你想屏蔽元素的软件,屏蔽之后的效果如下图所示,abp自动屏蔽广告,还可以自行添加屏蔽内容,右上角红色的ABP标识就是该软件 下载地址: htt ...
- 「学习笔记」gdb 调试的简单操作
gdb是一个命令行下的.功能强大的调试器. 在学习 gdb 前,我们要知道几个最基本的 cmd 命令. cmd 首先,对于 win10 系统,我们按 Windows + R 键,打开运行窗口,在里面输 ...
- .net开发-心情与效率
随着现代科技的不断发展,笔记本电脑已经成为我们日常生活中不可或缺的一部分.然而,在使用笔记本电脑的过程中,我们可能会遇到一些问题,例如显示器闪烁.HDMI接口接触不良等,这些问题不仅会影响我们的工作效 ...
- MySQL 慢查询探究分析
背景: 性能测试过程中,数据库往往是造成性能瓶颈之一,而数据库瓶颈中sql 语句又是值得探究分析的一环,其中慢查询是重点优化对象,在MySQL中,慢查询是指查询执行时间较长或者消耗 较多资源的查询语句 ...
- shopee商品详情接口的应用
Shopee是东南亚和台湾地区最大的电子商务平台之一,成立于2015年,目前覆盖6个国家和地区.作为一家新兴电商平台,Shopee拥有快速增长的销售额和庞大的用户群体,为开发者提供了丰富的商业机会.其 ...
- ArcMap中矢量数据修改标注Label的方法
本文介绍在ArcMap软件中,修改图层标签(Label)所显示字段与具体显示内容的方法. 在之前的文章中,我们看到了ArcMap中修改图层标签的重要性:可是,如何自定义图层的标签内容呢? ...