首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在所有应用程序的每个窗口中绘制或添加自定义按钮?

如何在所有应用程序的每个窗口中绘制或添加自定义按钮?
EN

Stack Overflow用户
提问于 2015-08-17 19:30:05
回答 2查看 1.4K关注 0票数 7

我见过一些工具添加了一个自定义按钮和/或在Windows中所有应用程序的所有窗口的标题栏上绘图。那是怎么做到的?特尔斐中一个例子的额外分数。

编辑:我为dotNET找到了这样做的东西:http://www.thecodeking.co.uk/2007/09/adding-caption-buttons-to-non-client.html#.VdmioEDenqQ

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-02 11:02:46

我还没有这样做,所以如果我尝试的话,下面是我要调查的内容:

  • 适用于每个应用程序/ 每个顶层窗口
  • 创建一个浮动窗口,并将其放置在标题栏上。建立父/子关系,但是这个窗口是您自己进程的一部分。(偶尔也会出现从一个过程到另一个过程中养育一个窗口的问题,但尝试一下。如果可能的话,我会避免注入其他过程。)
  • 您可以通过GetWindowLongWS_CAPTION查看窗口标志,查看窗口是否有标题栏(如果应该添加按钮)。同样的调用也会让您看到标题/帧的类型,您可以将其与GetSystemMetrics结合起来,例如,SM_CYDLGFRAME,以便在这个特定窗口的标题栏上为您的按钮确定合适的大小。
  • 这个窗口现在是您的按钮:油漆,处理点击等酌情。
  • 使它成为一个非聚焦窗口,这样点击它就不会把焦点从窗口中移开,是在标题栏上。例如,您不希望单击它使标题栏改变颜色。为此,可以设置WS_EX_NOACTIVATE窗口标志,类似于:SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) orWS_EX_NOACTIVATE`。
  • 主要的问题是在窗口移动、调整大小等情况下,保持它正确的位置。为系统移动事件安装钩子。您还可以通过EVENT_SYSTEM_MINIMIZEEND挂钩、最小化和恢复。这将允许您跟踪所有窗口在屏幕上移动,以便您可以调整按钮窗口的位置,如果必要的话。

这给了你一个窗口,你可以画一个按钮(并响应点击等),视觉上是“附加”到其他窗口,因此它停留在同一个位置,用户拖动标题栏,最小化或最大化应用等,这是在你自己的过程中,没有跨进程的问题。

票数 2
EN

Stack Overflow用户

发布于 2015-08-18 19:29:15

我对这份工作的看法:

  1. 首先,我们应该能够在我们自己的窗口标题上画这个按钮。此过程将在稍后使用。
  2. 程序的这一部分枚举活动窗口和可见窗口。
  3. 程序的这一部分使用注入将dll附加到枚举窗口。
  4. 从注入的dll中,我们可以在窗口标题上绘制按钮。
  5. 在这个dll中,我们应该处理单击按钮。
  6. 我们应该有机制将结果发送到我们的主程序。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32058232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档