4

デスクトップ スライドショーの変更をトリガーしようとしていますが、それを行うためのパブリック API が見つかりません...

私が近づいたのは、使用しているメソッドの名前を確認することでした(COMオブジェクトを使用していますが、インスタンス化するためのCLSIDはわかりません)。

デスクトップの壁紙を変更する方法は既に知っています (既に行っています)。必要なのは、スライドショーのトランジションをトリガーする方法です (Windows 7 の新機能)。

4

1 に答える 1

4

これはあなたの質問への回答ではなく、すでに解決しているかもしれませんが、デスクトップ スライドショー エンジン (私はそう呼びます) が開始されている場合 ([個人用設定] > [デスクトップの背景] を開いた場合、[デスクトップの背景] を選択します)。 [画像の場所] ドロップダウンから [Windows デスクトップの背景] を選択すると、背景がフェードインおよびフェードアウトするのがわかります - これはエンジンがオンになっているためです) 次に、JPEG 画像で [SetWallpaper] を呼び出してから [ApplyChanges] を呼び出して、 IActiveDesktop インターフェイスを使用できます。 ' 次のパラメーターを使用します。

AD_APPLY_ALL | AD_APPLY_FORCE | AD_APPLY_BUFFERED_REFRESH

そうすると、指定した壁紙を表示するためにスライドショーのトランジション効果が使用されていることに気付くでしょう。素晴らしい。

ただし、再起動 (または Explorer.exe を強制終了して再起動) すると、同じ呼び出しでは移行が行われず、背景が従来の方法で即座に変更されるだけです。Spy++ で掘り下げてみると、スライドショー エンジンが実行されている場合、実際のデスクトップ FolderView は、ウィンドウの親子関係で「Program Manager」の下に存在しなくなり、Explorer 内に存在する「WorkerW」と呼ばれる新しいウィンドウによって所有されていることがわかります。上記のコールスタックでうまくいきます)。つまり、Progman からデスクトップ ウィンドウを制御しています。

したがって、デスクトップ ウィンドウ (「スライドショー エンジン」) の新しい所有者を Explorer に初期化させる方法を理解する必要があります。その後、IActiveDesktop インターフェイスを使用して背景を変更できます。

于 2009-08-09T18:41:32.333 に答える