【问题标题】:How to be OnTop but not OnTop of a full screen application如何在全屏应用程序的顶部而不是顶部
【发布时间】:2012-02-26 10:47:14
【问题描述】:

所以我尝试在一天的大部分时间里寻找一个简单问题的答案。我希望我的 C# 应用程序在计时器上弹出另一个 winform,然后在延迟后关闭它。很简单,完成并完成。现在我的问题是我希望它实际上位于其他应用程序之上,除非它们是全屏的。我的意思是真正的全屏应用程序,例如游戏。我不想干涉这样的申请,因为它应该优先于我的申请。

问题是我在弹出表单上使用了“OnTop”属性,虽然它适用于任何其他应用程序,但我在玩全屏游戏和表单时一直在测试它,当它“Show() "s,采用全屏应用程序并将其放入窗口模式。

这是全屏应用程序的“OnTop”属性的预期效果吗?如果是这样,有没有一种方法可以让我的表单弹出在普通窗口窗口之上,而不会干扰全屏应用程序?

任何链接,例如,大方向的踢球都很棒。在搜索涉及全屏的 winform 时,我遇到的唯一结果是人们试图让他们的应用程序进入全屏状态,或者让他们的应用程序将焦点从另一个应用程序上移开。

提前致谢。

(我没有发布任何代码,因为它只是一个简单的winform,它是设置了“onTop”属性的计时器上的“formX:Show()”)


(编辑)所以感谢 awilson53 让我走上了正确的轨道,我能够找到一种方法(尽管有些挑剔)来确定应用程序是否全屏。似乎有点简单,而且是一个“嗯,嗯”,毕竟答案已经说了又做了。

95% 的功劳归于文章作者:http://www.richard-banks.org/2007/09/how-to-detect-if-another-application-is.html

~5% 归功于 awilson53 让我走上正轨。 :)

【问题讨论】:

  • 我不知道有什么简单的出路。但也许有办法遍历所有打开的应用程序并检查它们的窗口状态。然后为您的弹出窗口确定一种“Z 级”。
  • 在不窃取焦点的情况下显示窗口可能会有所帮助。 stackoverflow.com/questions/156046/…
  • Windows 不允许表单为“最”OnTop。如果另一个程序有相同类型的设置怎么办?
  • @Josh 从之前的搜索中尝试了该问题的建议,但没有任何乐趣。 winform 不会窃取焦点,但仍会将全屏应用程序弹出到窗口模式。
  • @LarsTech 我的印象是“错误”(?)全屏应用程序优先于窗口应用程序。自从我退出全屏应用程序后,一定有办法找到一个盯着我等待输入的表单。

标签: c# winforms popup fullscreen


【解决方案1】:

查看 EnumWindows 函数的 this 包装器。这将允许您枚举所有打开的窗口并确定它们的窗口状态。您将需要检查 EnumWindowItem.Maximized 属性,如果为真,请将 OnTop 属性设置为假。如果 EnumWindowItem 没有返回 Maximized,您可以将 OnTop 设置为 true。

【讨论】:

  • 然后,如果您愿意,如果实际上有一个全屏窗口,您可以使用SetWindowPos API 函数。
  • 感谢您的想法。我成功地实现了这个类,它返回一个窗口是否最大化。我需要的是确定一个应用程序是否是全屏的,而不仅仅是一个最大化的窗口。然而,这确实让我走上了正轨,因为我不相信除了使用 dll 导入之外还有其他方法。由于您让我走上了正确的思路,请参阅我的原始帖子以获取我找到的答案。谢谢!
  • 我打字很匆忙,错过了您在全屏和最大化之间所做的区分,但很高兴我仍然能够不顾一切地提供帮助!
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
相关资源
最近更新 更多