2

アプリケーション(ブラウザで「シングルプロセス」を実行するFirefoxプラグイン)でAeroを有効にしようとしていますが、失敗しています。OSはWindows764ビットです。

これはコードです:

BOOL bEnabled = FALSE;
if(SUCCEEDED(DwmIsCompositionEnabled(&bEnabled)) && !bEnabled){         
    HRESULT hres = DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
}

DwmEnableCompositionは合成を有効にする必要がありますが、有効にしません。また、関数は次を返します。

S_OK

助けていただければ幸いです、ありがとう!

4

2 に答える 2

3

DWM コンポジションを有効にすることはできません。無効にすることのみをリクエストできます。オフにする必要が終わったら、呼び出します

DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);

MSDN から:

DWM 合成は、合成を無効にしたすべてのプロセスが DwmEnableComposition を呼び出して有効にするか終了すると、自動的に有効になります。

有効にすることはできません。無効にする必要がなくなったことを発表するだけです。(Microsoft がコンポジションを有効にしない理由は、コンポジションを行わないことを信頼できないからです。 )

遅れている間もあきらめるべきです。再びMSDNから:

注: この関数は、Windows 8 コンシューマー プレビューの時点で非推奨です。DWM をプログラムで無効にすることはできなくなりました。

于 2012-05-04T02:48:37.767 に答える
1

DwmEnableComposition()システム全体で無効になっている場合は効果がありません。唯一の目的は、DWM と互換性のない操作を開始または終了していることを Windows に通知することです。

さらに、OS がどのように見えるかはユーザー次第であり、それを構成するプログラム次第ではありません。

于 2012-04-12T08:55:48.927 に答える