原文参考

主要是通过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的IActiveBuildTargetChanged:深入解析与实用案例

    Unity IActiveBuildTargetChanged Unity IActiveBuildTargetChanged是Unity引擎中的一个非常有用的功能,它可以让开发者在切换构建平台时自定 ...

  2. 为什么 kubelet 不使用容器化部署?

    每日一问系列 为什么 kubelet 不使用容器化部署? 通过脚本(shell/ansible 等)在节点上部署 kubelet 服务时,涉及 kubelet 进程 service 启动配置.证书等, ...

  3. LEA: Improving Sentence Similarity Robustness to Typos Using Lexical Attention Bias 论文阅读

    LEA: Improving Sentence Similarity Robustness to Typos Using Lexical Attention Bias 论文阅读 KDD 2023 原文 ...

  4. Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error

    Navicat 连接 Oracle 报 ORA-03135: connection lost contact ORA-28547: connection to server failed, proba ...

  5. C语言指针--一级指针

    文章目录 前言 一.什么是指针 二.一级指针的使用 1.一级指针的创建 2.指针的赋值 3.&是什么 4.一维指针的使用 4.1 `变量` 和 `*变量` 4.2 输出指针变量内容 4.3 改 ...

  6. Argument data type text is invalid for argument 1 of replace function

    今天给webapi添加了搜索,结果数据库显示了这个错误, Argument data type text is invalid for argument 1 of replace function 查 ...

  7. asp.net core之路由

    在 ASP.NET Core 中,路由是一个非常重要的概念,它决定了如何将传入的请求映射到相应的处理程序.本文将详细介绍 ASP.NET Core 中的路由系统,包括路由的基本原理.路由模板.路由参数 ...

  8. 基于weave实现docker跨主机网络通信

    前言 IP: 192.168.0.10 192.168.0.11 系统版本:centos 7 weave版本:2.8.1,下载地址:https://git.io/weave docker版本:18.0 ...

  9. 微信小程序上传文件操作示范

    社会实践心得体会格式要求 提交的心得体会应为word文档,且图文并茂,全文段前.段后0,1.5倍行距. 题目:自拟,方正小标宋简体,小二号,加粗,居中. 个人信息:题目下方,宋体,小四号,加粗,居中, ...

  10. Linux文件管理知识查找文件(第二篇)

    Linux文件管理知识:查找文件(第二篇) 上篇文章详细介绍了linux系统中查找文件的工具或者命令程序locate和find命令的基本操作.那么,今天这篇文章紧接着查找文件相关操作内容介绍. Fin ...