DwmGetCompositionTimingInfo()が失敗する – プログラミング – Home

通知
すべてクリア

[解決済] DwmGetCompositionTimingInfo()が失敗する


iy
 iy
(@iy)
ゲスト
結合: 15年前
投稿: 5
Topic starter  

お世話になります。

DWMの情報を取得するためにDwmGetCompositionTimingInfo関数を
以下のように呼び出すコードを書きましたが、
常にエラー(E_PENDING)が返ってきてしまいます。

DWM_TIMING_INFO dwmti;
dwmti.cbSize=sizeof(dwmti);
HRESULT hr=DwmGetCompositionTimingInfo(hwnd,&dwmti);
// ここで必ずエラー(E_PENDING)が返ってくる

この前後で別のDWM関数を呼び出すと、それは成功します。

BOOL fNcRendering;
hr=DwmGetWindowAttribute(hwnd,DWMWA_NCRENDERING_ENABLED,
             &fNcRendering,sizeof(BOOL));
// これは成功する

どうすれば正常に動作させられるのでしょうか。
開発環境はVC 2008、OSはVista Home Premium SP2です。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

# 答えではありません

Windows 7 Ultimate ですが、結果は同じですね。
検索してみてもほとんど資料がありません。MSDN にも情報が少なすぎます。

ただ、一般的に E_PENDING というのは、(真面目に実装されていれば)「関数の実行は
受理されたが、結果はまだ出せないので、後ほど取得すべし」というエラーコードだと
思います。
なので、失敗とは決めつけられない…と思うのですが。
DWM 系の他の関数を見ても、関数名から直感的に判断できる範囲では、その「後ほど取
得する」ものが見当たらないのが問題ですね。


返信引用
iy
 iy
(@iy)
ゲスト
結合: 15年前
投稿: 5
Topic starter  

お返事ありがとうございます。

EnumWindows()で取得した色々なウィンドウのハンドルを渡してみたり、
それらしい名前のDwmFlush()を呼んでみたり色々試行錯誤してみてもダメだったのですが、
なんと最初の引数をNULLにしたらS_OKが返ってきて、
DWM_TIMING_INFOにもそれらしい値が取得できました。
MSDNでもそんなこと一言も書いてないんですけどねぇ…。

おっしゃる通り、DWM系の関数は全然情報がありませんね。
MSDNを見ても、何の関数なのかの説明すら書いていなかったりしますし。
DwmGetCompositionTimingInfo DWM_TIMING_INFO で検索すると、
ここが一番上に出てきますね…。

ともあれ、今回はこれで解決とします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました