問題タブ [dxgi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-c++ - デスクトップ複製画面キャプチャ - DuplicateOutput が E_ACCESSDENIED エラーを返す
デスクトップ複製 API (DirectX11) を使用して画面をキャプチャしています。DuplicateOutput API はアクセス拒否エラーを返します。アプリケーションが SYSTEM レベルの権限で実行され、SetThreadDesktop が適切に呼び出されているにもかかわらず、ログオン画面の Windows 8.1 マシンでも非常にまれに (10% の確率で) 発生します。エラーが発生するたびにリセットして SetThreadDesktop を呼び出していましたが、その後、複数のデバイスのリセットと初期化を行った後でも、アプリケーションはエラーから回復できませんでした。複数回の再試行またはアプリケーションの再起動後に GDI (directx から GDI に切り替えた後、アプリケーションは正常に動作する) ベースのアプローチにフォールバックする必要がありましたが、その考えはひどいようです。
注: Windows 10/Windows 8 マシンでも同じ問題に遭遇しましたが、その特定の Windows 8.1 マシンと比較するとそれほど頻繁ではありません。
E_ACCESSDENIEDエラーの説明は、このエラーの可能性のあるケース (システム レベルの権限がない、または SetThreadDesktop が正しく呼び出されていない) のみを示します。問題を見つけるために考えられるすべての方法を試しましたが、できませんでした。
事前に感謝します。
デバイスを初期化するコードは次のとおりです。
デスクトップを現在のスレッドに設定するコード:
エラー コードの処理後に返されるエラー メッセージを次に示します。
Id3d11DuplicationManager::ProcessFailure - エラー: DUPLICATIONMANAGER で重複した出力を取得できませんでした。詳細: アクセスが拒否されました。