SPDの動作OSに関しては明記してなくて、
>【動作確認環境】Windows XP
としてるけど、VISTAで”壁紙を変更”メニューが動作しないという報告があったので、次リリースからは【動作環境】Windows XPと明記しようと思います。ただ、VISTA / 7 には対応させたいと思ってます。テスト環境の入手の目処が全く立たないのでどうにも出来ないんですね。ぶちゃけちゃうとお金がない。
“壁紙を変更”が動作しない理由はだいたい検討ついてます。現在はSystem.Diagnostics.Process.Start()メソッドで”desk.cpl”を実行させ、終了時にレジストリから変更された壁紙を取得するという実装になってます。この”desk.cpl”がVISTAでは別の何かなんでしょうね、調べてないけど。ここに独自の”壁紙を変更”画面を実装すればVISTAでも上手く動くんじゃないかと、ブランチを作って実装を始めてます。
もうひとつVISTAでの問題があるんですよね。SPDが実行されていないときに壁紙が変更されても次にSPDが起動されたときにそれを検知してSPDにも反映する機能があるのですが、これがVISTAで上手く動かないみたい。この機能は、SPDの終了時に壁紙を記録したレジストリのキーをSPDの設定ファイルに保持して、次回起動したときに、前回記録したキーと現在のキーを比較する実装になってます。この保持するべきレジストリのキーがVISTAだと違うんでしょうね。XP上でも、IEのメニューから壁紙を変更した場合にSPDで検知出来なかったりするし。関連するレジストリのキーを全部洗い出して保持するのも割に合わないし、この機能は廃止しちゃおうかなぁ…。OSや環境に依存せずに壁紙を取得する方法があればいいんだけどな。やっぱレジストリをゴニョゴニョするのは美しくない。
どんな対策をしようとVISTAも7も持ってないので確認のしようが無いんですけどね。まぁ、何時か環境を入手出来たときに対応作業が楽になればいいなってことで。
※追記(12/7)
VISTA/7でも”desk.cpl”のコマンドは変らないようです。
もしかしたらこれ(Visual Basic 中学校 掲示板 Process.WaitForExitが効かない)が原因なのかも。だとしたらどうにもならないよね、OSの仕様みたいだし。やっぱり独自の”壁紙を変更”画面を実装する方向で良かったのかも。
独自の”壁紙を変更”画面の実装がさっき終わりました。WindowsXPの画面のプロパティにはない壁紙の配置方法が選べます。
・中央に表示
・並べて表示
・拡大して表示
・拡大して表示(アスペクト比維持、余白あり)
・拡大して表示(アスペクト比維持、余白なし)
痒いところに手が届いてるでしょ、と自画自賛。
しばらくの間自分で使ってみて問題が無ければUPします。