有没有办法在DisableProcessWindowsGhosting之后重新打开Windows重影功能?

tec*_*lic 10 windows winapi

我们有一个应用程序在主线程中做了大量的工作.为防止Windows认为它"无响应"并启动重影功能(如此链接中的"挂起 - 操作系统透视"部分所述),我们可以使用DisableProcessWindowsGhosting关闭重影功能.

但是我们不希望在剩下的会话中将其关闭,我们希望在繁重的工作完成后重新开启.不幸的是,Windows没有提供任何(记录的)API.

是否有任何(可能是hacky)方式将其重新打开?

有趣的是,当应用程序在VC调试器中运行时,重影功能会被关闭,但是一旦它被分离,它就会重新启动.调试器必须有一些东西,任何想法?

小智 2

无视这样一个事实,在 UI 线程上做繁重的工作本身就是错误的(繁重的工作应该在一个单独的线程上完成,该线程可以选择将其进度传达给 UI),下面的建议只是为了回答这个问题,支持评论中提到的遗留代码场景。

DisableProcessWindowsGhosting是一条单向道路,并且在进程的生命周期内禁用重影功能,因此唯一的重新启用条件是重新启动整个进程。

否则,所有正在调试的应用程序(不仅在 VC 调试器中,而且在任何调试器中)也不会出现重影。如果您想解决这种情况,您可以创建一个配套应用程序,它将在繁重的工作期间作为调试器 ( ) 连接到您的应用程序,并在完成后DebugActiveProcess自行分离 ( DebugSetProcessKillOnExit(FALSE)+ )。DebugActiveProcessStop这会降低性能,并可能导致海拔、分叉和 SEH 等问题。

最小化的窗口应该也不会出现重影,但我自己还没有测试过这一点。