2017-10-19 14 views
4

UACプロンプトが(私のアプリケーションではなく)トリガされると、ムービーの代わりに描画された最後のフレームが画面に表示される特定のもの(Direct3Dデバイスハンドルと思われます)が破損します。Windows UACプロンプトが表示されたときにWinAPIメッセージが表示されますか?

3D画像を表示するコード(プラグイン)は書きませんでしたが、UACプロンプトの後にウィンドウのサイズを変更すると画像が返されます。

UACのプロンプトが閉じていることを検出する方法があるので、ディスプレイをリフレッシュして補正するコードを呼び出すことはできますか?

答えて

6

一般に、UACプロンプトは安全なデスクトップに表示されるため、別のデスクトップへの切り替えが伴います(SwitchDesktop参照)。このオプションをオフにしてにすることはできませんが、ではUACプロンプトがデスクトップスイッチを引き起こすことはありますが、セキュリティ上の理由からデフォルトでオンになっているため、視覚障害が発生する可能性がほとんどあります。

EVENT_SYSTEM_DESKTOPSWITCH eventを聞いてSetWinEventHook functionを使用して、これが発生したという通知を受け取ることができます。他の状況がデスクトップスイッチを引き起こす可能性があるため、誤認があるかもしれませんが、これらのすべてのケースで再描画するだけでは大したことではないでしょう。

これは一般的な解決策ですが、確実に機能しない可能性があります。あなたは一般的にと考えています。は、セキュリティ保護されたデスクトップが表示されていることを検出できると考えられています。

使用しているDirect3Dのバージョンは指定されていませんが、レガシーバージョン(たとえばDirect3D 9)の場合、このデスクトップの切り替えは、レンダリングデバイスが失われたかのように処理されます。あなたの場合のよりよい解決策は、おそらく、デバイスの紛失通知用のハンドラ(EC_DEVICE_LOST)をインストールして、ハンドルを再設定して再描画を強制するなど、適切に対応できるようにすることです。

これは、デスクトップスイッチのイベントを認識するように書かれているため、これは現代版のDirect3Dでは問題ではありません。 UACプロンプトは、デスクトップスイッチにつながる一般的なシナリオの1つです。ワークステーションのロックは別のものです。どちらも安全なWinlogonデスクトップに切り替わります。新しいWDDM対応バージョンのDirect3D(、たとえば、Direct3D 9Ex、またはDirect3D 10以降)should handle this seamlessly, without losing the rendering device and without experiencing any visual disruption

関連する問題