gpt4 book ai didi

c# - 在 Windows Vista/7 Aero 标题栏上绘制自定义按钮

转载 作者:可可西里 更新时间:2023-11-01 09:10:36 26 4
gpt4 key购买 nike

我在 StackOverflow 上发现了这个问题.基本上,用户想在标题栏上绘制自定义按钮。

我尝试了代码并意识到只有在 Aero 被禁用时它才能在 vista/7 中工作。我的问题是, aero 启用时,是否有任何方法可以在标题栏上绘制自定义按钮?

此外,是否有任何方法可以从当前主题中读取信息,以便我可以设计我的按钮以匹配已经存在的按钮。


更新

这是我的电脑截图,展示了上述概念。安装 DisplayFusion 后,我得到了额外的标题栏按钮。
Notepad2 showing additional buttons.

而且我知道 DisplayFusion 是一个 .NET 程序,因为它在 .NET Reflector 中打开。不利的一面是程序被混淆了。不像我想反编译程序或任何东西;我只想在我的标题栏上添加一个按钮来做其他事情(例如最小化到系统托盘)。
下面是屏幕截图,证明该程序是一个 .NET 应用程序。
.NET Reflector showing DisplayFusion

最佳答案

我对此进行了一些研究,因为我也在自己的多显示器解决方案中实现了这一点。 DisplayFusion 和 TeamViewer 实现这一点的方式是将自定义表单覆盖在包含按钮的所需窗口上。您可以使用 Spy++ 来确认这一点。

这是总体思路:

  1. 编写一个 DLL Hook ,以便在创建、删除、激活、重新定位或调整窗口大小时收到通知。
  2. 使用透明键或使用此 alpha-PNG and GDI+ solution 制作透明表格并通过自己绘制来模拟按钮。
  3. 在创建/删除窗口时,您可以显示/隐藏所需窗口的标题栏按钮表单。
  4. 在窗口调整大小/重新定位消息中,您重新调整 titlebarbutton 表单。
  5. 在窗口激活时,您可以设置窗口的 Z 位置,使其位于所需窗口的顶部。

通过 GetWindowSetWindowPos API 获取和设置 Z 位置。
请注意,DLL 必须使用本地语言编写。但是,您可以使用类似这样的方法来解决该问题: Using Window Messages to Implement Global System Hooks in C#

这是我的结果:

enter image description here

关于c# - 在 Windows Vista/7 Aero 标题栏上绘制自定义按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com