【问题标题】:Is there a way i can draw a transparent WPF application over the desktop at all times?有没有办法我可以一直在桌面上绘制一个透明的 WPF 应用程序?
【发布时间】: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 天哪,是的,你说得对!

标签: c# wpf overlay desktop user32


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 您好!感谢您的回复,我已经设法让全局热键捕获适用于 windows+d。当我执行您提供的代码时,没有任何反应。在执行 windows + d 快捷方式之前和之后,窗口状态一直保持WindowState.Normal。桌面的 Z-Index 似乎增加以隐藏所有其他窗口。
猜你喜欢
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多