有没有办法我可以一直在桌面上绘制一个透明的 WPF 应用程序?

Posted

技术标签:

【中文标题】有没有办法我可以一直在桌面上绘制一个透明的 WPF 应用程序?【英文标题】:Is there a way i can draw a transparent WPF application over the desktop at all times? 【发布时间】:2020-02-03 12:22:23 【问题描述】:

当人们在 Windows 上使用显示桌面快捷方式 (WINDOWS+D) 时,有没有办法让 WPF 应用程序在桌面上持续存在?

我正在尝试使用小部件制作桌面覆盖应用程序。 (Same concept as rainmeter) 我目前正在使用user32.dll 中的函数来保持窗口位于桌面顶部。

在我使用WINDOWS+D之前,这一切都很好

我试过了:

在窗口停用事件上,将窗口位置插入桌面位置上方

父窗口到桌面

任何建议将不胜感激!

【问题讨论】:

CTRL+D 应该做什么,在您的特定情况下它在做什么? @theMayer 显示桌面,已编辑 我相信你的意思是“WINDOWS + D”而不是 CTRL。 @theMayer 天哪,是的,你说得对! 【参考方案1】:

一种(可能是肮脏的)方法是注册一个热键来捕获 WIN+D 调用,如此答案中所建议的那样:https://***.com/a/824395/12167858

一旦你有办法捕捉热键,你就可以知道它的触发事件是在本机 WIN+D 响应之前还是之后触发(显示桌面)。

我自己还没有对此进行测试,但是,如果它确实在本机响应之后触发,那么你就可以开始了。否则,如果这样的解决方案可以接受,您可以使用 Task.Delay() 等待 Windows 完成最小化所有可见窗口。

/edit:我忘记了关键部分:一旦你确保 Windows 完成了它的工作,调用下面的代码(如这里建议的:https://***.com/a/6837421/12167858)让窗口恢复到原来的状态:

if (myWindow.WindowState == WindowState.Minimized)
myWindow.WindowState = WindowState.Normal;

【讨论】:

您好!感谢您的回复,我已经设法让全局热键捕获适用于 windows+d。当我执行您提供的代码时,没有任何反应。在执行 windows + d 快捷方式之前和之后,窗口状态一直保持WindowState.Normal。桌面的 Z-Index 似乎增加以隐藏所有其他窗口。

以上是关于有没有办法我可以一直在桌面上绘制一个透明的 WPF 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

WPF 透明窗体,无边框(比如一些桌面的日历桌面程序),如何让程序钉在桌面上。直接镶嵌在桌面背景上?

如何在透明窗口中绘制透明 DirectX 内容?

有没有办法使控件对 WPF 中的鼠标事件透明?

WPF 透明窗口在桌面上放虫子。。。

进阶篇python使用tkinter实现透明窗体上绘制运动小球(第三篇)

绘制大量半透明矩形,wpf和GDI哪个效率高?