2017-10-19 78 views
4

當UAC提示符被觸發(不是由我的應用程序)時,它會破壞某些東西(我相信它是Direct3D設備句柄),這會導致屏幕顯示最後一幀而不是移動圖像。當Windows UAC提示被觸發時是否有WinAPI消息?

我沒有編寫顯示3D圖像的代碼(它是一個插件),但在UAC提示符後,如果我調整窗口大小,圖像將返回。

有沒有辦法檢測到UAC提示關閉,所以我可以調用代碼來刷新顯示來補償?

回答

6

UAC提示通常顯示在安全桌面上,因此它會伴隨切換到不同桌面(參見SwitchDesktop)。儘管您可以關閉此選項,並且而不是有UAC提示會導致桌面切換,但出於安全原因,默認情況下它處於打開狀態,幾乎肯定是您看到任何視覺干擾的原因。

您可以使用SetWinEventHook function,監聽EVENT_SYSTEM_DESKTOPSWITCH event,以便接收已發生的通知。你會得到一些誤報,因爲其他情況可能導致桌面切換,但在所有這些情況下繼續並重繪可能不是什麼大事。

雖然這是一個通用的解決方案,並且可能無法可靠地工作。一般來說,您並不是假設能夠檢測到安全桌面何時可見,因爲這會打開一個可能的安全漏洞。

該問題沒有指定您使用的是哪個版本的Direct3D,但是如果它是舊版本(例如Direct3D 9),則將處理該桌面切換,就好像渲染設備丟失一樣。在你的情況下更好的解決方案可能是爲丟失設備通知(EC_DEVICE_LOST)安裝處理程序,以便您可以正確響應,包括重新建立句柄並強制重繪。

但是,現代版本的Direct3D應該不會出現問題,因爲它們是爲了瞭解桌面切換事件而編寫的。 UAC提示是導致桌面切換的一種常見情形;鎖定工作站是另一回事。這兩個都切換到安全的Winlogon桌面。 Direct3D的新版WDDM感知版本(,例如,Direct3D 9Ex或Direct3D 10及更高版本)should handle this seamlessly, without losing the rendering device and without experiencing any visual disruption

相關問題