Win32 OleGetClipboard()関数がCLIPBRD_E_CANT_OPENを返すのはなぜですか?
質問
Win32 API関数OleGetClipboard()はどのような状況で失敗し、 CLIPBRD_E_CANT_OPEN
を返しますか?
その他の背景:Firefoxのバグ修正を支援しています。詳細はこちら:
バグ444800 -クリップボードからロスレス形式で画像データを取得できません
作成を支援した自動テストでは、OleGetClipboard()が失敗して CLIPBRD_E_CANT_OPEN
を返すことがあります。それは予想外のことであり、Windowsクリップボードから画像データを取得するFirefoxコードは、その呼び出しが成功するかどうかに依存します。
解決
ドキュメントでは、 OpenClipboard
が失敗すると、 OleGetClipboard
がこのエラーコードで失敗する可能性があると記載されています。そのドキュメントを読むと、次のように表示されます。
" OpenClipboard は、別のウィンドウでクリップボードを開いていると失敗します。
これは排他的なリソースです。一度に開くことができるウィンドウは1つだけです。基本的に、できない場合は、しばらく待ってからもう一度試してください。
他のヒント
テストはターミナルサービスで実行されていますか? .NETからクリップボードを設定する際の CLIPBRD_E_CANT_OPENエラーを参照してください。
MSDNに表示されていることから、問題はクリップボードに実際にデータを 入れようとした人に起因していると思われます。データのソース。何らかの理由でOleSetClipboard()の呼び出しが失敗した場合、内容を抽出することはできません。 データがどのようにクリップボードに入れられているかを見て、これを実行するテストケースがあるかどうかを確認し(データをクリップボードにコピーします)、それからあなたが話している問題を引き起こします。