一般に、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。