【问题标题】:How to intercept the "Show Desktop" event?如何拦截“显示桌面”事件?
【发布时间】:2011-07-25 13:53:29
【问题描述】:

我正在寻找一种方法来拦截 ShowDesktop 事件并将我的窗口设置在前面。 有没有办法在不使用 API 挂钩的情况下做到这一点? 谢谢, 奥马尔。

【问题讨论】:

  • 请不要这样做。您不拥有计算机,程序的用户拥有。如果他们不想看到你的节目,那是他们的选择。
  • 我希望不会。你为什么要这么做?
  • 听起来是个非常糟糕的主意。
  • 如果用户运行了两个这样的程序怎么办? Raymond 一如既往地拥有answer
  • 我正在编写一个停靠栏,因此,必须始终在桌面上显示它。

标签: c++ windows winapi user-interface


【解决方案1】:

如果您正在编写 Windows 任务栏样式的停靠栏,那么只需确保您的窗口设置了 WS_EX_TOPMOST 并且“显示桌面”将不理会它。或者使用SetWindowPos 使其成为创建后最顶层的窗口,例如:

SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); 

更新:您需要使用 Windows 应用程序栏 API 来制作“停靠”风格的应用程序。详情请见here

应用程序栏也需要从 Alt+Tab 等时显示的顶级列表中删除,这可以通过添加 WS_EX_TOOLWINDOW 和删除 WS_EX_APPWINDOW 来完成。

我应该早点说清楚,抱歉。

【讨论】:

  • 适用于我使用 Windows AppBar API 的任务栏式应用程序。
  • 我从空的 Win32 项目开始。不知道为什么这不起作用。
  • 我真的很奇怪,它现在可以工作,但它以前对我不起作用(它总是在顶部,除非我点击切换桌面按钮然后它消失了)也许它是由于某些样式\前样式组合引起的。无论如何,非常感谢!
  • 哦,顺便说一句,我不想​​使用 AppBar API,因为我不想保留任何屏幕空间。
  • 我的问题是,我想创建一个桌面替换,因此我的应用程序是 bottom-most 而不是 top-most - 做您可能有任何解决问题的提示/想法?
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 2011-04-10
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多