有没有办法我可以一直在桌面上绘制一个透明的 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 透明窗体,无边框(比如一些桌面的日历桌面程序),如何让程序钉在桌面上。直接镶嵌在桌面背景上?