【问题标题】:Detecting Fullscreen App Exit in Windows在 Windows 中检测全屏应用程序退出
【发布时间】:2016-10-15 13:26:17
【问题描述】:

Windows 是否提供某种机制来检测以全屏模式运行的应用(例如游戏、媒体播放器等)何时退出全屏模式,返回到窗口模式或退出其进程?

【问题讨论】:

    标签: c++ windows winapi


    【解决方案1】:

    就操作系统而言,没有“全屏模式”或“窗口模式”之类的东西。窗口只是具有尺寸,可能恰好与屏幕尺寸相同或不同。拥有窗口的应用程序控制该行为,而不是操作系统,因此只有应用程序知道它何时以“全屏”或“窗口”模式显示窗口。

    话虽如此,当更改模式时,应用程序可以选择使用CDS_FULLSCREENCDS_RESET 标志调用ChangeDisplaySettings/Ex()。这将向所有顶级窗口发送WM_DISPLAYCHANGE 通知,但不会告诉他们是否正在显示全屏窗口。

    关于检测进程终止,WMI 有一个事件。见Receiving Event Notifications Through WMI

    【讨论】:

    • 我一直认为全屏应用与全屏无边框应用不同。这背后的原因是因为第一个窗口创建时存在闪烁,而后者则没有。在前台执行期间,全屏应用程序是否在 Windows 上拥有图形的所有权?
    • @rlam12 全屏应用只是全屏窗口,没有什么特别之处。我不知道您指的是闪烁,但“全屏”窗口不会“拥有图形的所有权”,它像任何其他窗口一样正常绘制。
    • @rlam12:自从引入 DWM 以来,GPU 不再被应用程序独占使用,无论是否全屏(参见The role of the Windows Display Driver Model in the DWM)。
    【解决方案2】:

    一种简单的方法,我决定采用的方法是在创建的进程上使用RegisterWaitForSingleObject,如下所述:https://stackoverflow.com/a/22418949/1019385

    我发现它比 WMI 解决方案更平易近人。

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多