原文参考

主要是通过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平台修改窗口标题的更多相关文章

  1. Win平台下窗口操作(Unity)

    Unity发布在Win平台时, 可以通过user32.dll的方式与Win API通信, 最小化窗口代码: public static class DllImports { private const ...

  2. RMAN备份到共享存储失败(win平台)

    RMAN备份到共享存储失败(win平台) 之前在<Win环境下Oracle小数据量数据库的物理备份>这篇文章中,介绍了在win平台下对于小数据量的数据库的物理备份设计. 文中重点提到,强烈 ...

  3. win平台搭建Lnmp环境

    win10上面安装的phpStudy这些天有时候打不开网页 502,请求一直loading,就算是代码问题我也扶不住,安装个Redis,mongodb都超级麻烦,并且好多都模拟Linux做的东西,最终 ...

  4. win平台,apache通过web访问svn

    上个月用php写一个在线打包lua变成luac,碰到个权限问题.pysvn无法更新.网上搜了好半天都找不到解决方法.最好还是自己解决了. 解决方法也很简单,找到aphache服务,提权限就行了.lin ...

  5. win pe 修改xp系统开机密码方法

    今天使用win pe 修改了xp系统的密码,有三种方法 一 .  最终找到了一个方法,这个方法只能改写密码,也就是说会留下痕迹,如下: 1.使用的工具:FbinstTool v1.50 FbinstT ...

  6. Qt下如何修改文件的时间(全平台修改)

    提供一个全平台修改文件的时间的方法,希望大家喜欢 /* UTIME.C: This program uses _utime to set the * file-modification time to ...

  7. 12.QT4.7.4-解决WIN平台和Linux平台中文乱码,QLineEdit右击菜单中文显示

    1.解决Win平台中文显示 1.1首先解决win平台上中文显示乱码问题 1)首先查看qt creator的编码格式 通过->编辑->选择编码 查看. 2)如果qt creator的编码格式 ...

  8. Unity编辑器 - 资源修改立即写入磁盘AssetDataBase.SaveAssets()

    Unity编辑器 - 资源修改立即写入磁盘AssetDataBase.SaveAssets() 在编写编辑器时,如果需要修改Unity序列化资源(如Prefab,美术资源,ScriptableObje ...

  9. 编译带libev和libuv的libwebsocket (Win平台)

    编译使用libwebsockets-2.0-stable版本. 编译依赖项目cmake,lws项目配置和生成依赖python, gpy工具依赖gpy, libuv项目配置和生成依赖,又一个项目配置和生 ...

  10. Golang Web应用 创建docker镜像笔记(win 平台)

    记录的是 本地编译好了再创建容器镜像的方法 ,这样子生成的镜像文件比较小,方便分发部署 win 平台需要设置golang交叉编译 生成linux可执行文件 CMD下: Set GOOS="l ...

随机推荐

  1. Unity UGUI的所有组件的介绍及使用

    Unity UGUI的所有组件的介绍及使用 本文将介绍Unity UGUI中的各个组件,包括它们的具体介绍.用途 1. Text(文本) 介绍:Text组件用于在UI界面上显示文本内容. 用途:常用于 ...

  2. 用虚拟机配置Linux实验环境

    我们平时经常需要利用VMware搭建Linux实验环境,下面我将搭建步骤整理了一下. 安装虚拟机 系统镜像:CentOS-7-x86_64-Everything-1708.iso 用VMware安装系 ...

  3. SkipList原理与实现

    机制 链表中查询的效率的复杂度是O(n), 有没有办法提升这个查询复杂度呢? 最简单的想法就是在原始的链表上构建多层索引. 在level 1(最底层为0), 每2位插入一个索引, 查询复杂度便是 O( ...

  4. Linux中的进程页表

    是什么 进程页表是用于管理进程虚拟地址空间和物理内存之间映射关系的数据结构.它记录了进程中每个虚拟页对应的物理页的信息. 什么作用 进程使用进程页表的方式是通过虚拟地址访问内存.当进程访问一个虚拟地址 ...

  5. v4l2采样usb摄像头并显示

    ubuntu 思路: 1. 首先理解camera工作原理,重点理解 yuv,rgb视频流, 即Sensor数据输出的图像格式; 大体过程:光线通过镜头Lens进入摄像头内部,通过IR过滤掉红外光,抵达 ...

  6. 硬件管理平台 - 公共项目搭建(Nancy部分)

    项目变更 之前使用的是Nancy库进行项目搭建的,使用的Nuget版本及其他引用如下 <?xml version="1.0" encoding="utf-8&quo ...

  7. vue: 在页面中单独引入elment-ui

    引入资源 首先引入Vue,之后引入element-ui. 引入组件 返回数据 全部代码 <!DOCTYPE html> <html lang="en"> & ...

  8. 程序后台运行方法:使用守护进程 或 screen软件

    我们常需要SSH远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,在此期间不能关掉窗口或者断开连接,否则这个任务会被杀掉,一切就半途而废了. 可以使用以下两个方法: 方法一:noh ...

  9. Stable Diffusion基础:ControlNet之图片风格迁移

    今天继续给大家分享AI绘画中 ControlNet 的强大功能,本次的主角是 Reference,它可以将参照图片的风格迁移到新生成的图片中,这句话理解起来很困难,我们将通过几个实例来加深体会,比如照 ...

  10. Programming abstractions in C阅读笔记: p118-p122

    <Programming Abstractions In C>学习第49天,p118-p122,总结如下: 一.技术总结 1.随机数 (1)seed p119,"The init ...