テーマの変更。BaseHue が変更されなかったが解決。

テーマを色々と試して変更をしているのですが、BaseHue だけが何故か変更されません。
といっても普通に、設定→Today から変更をかければ問題無いですが、今はプログラミングでテーマを変えようとしている話です。

色々と探してみると、

QA: How to install a Today theme file?
http://www.pocketpcdn.com/articles/changetodaytheme.html

を発見。早速 c# に移植してみると・・・確かにテーマは変更されるけど、BaseHue だけが変更されずそのまま。
上下のバーの色も変わらない、レジストリの BaseHue もそのままデフォルト値が入っている。


う〜む。
という訳でリモートスパイを使用して、テーマ変更中のメッセージのやりとりを見てみる。


WM_SETTINGCHANGE ( WM_WININICHANGE ) と WM_SYSCOLORCHANGE を投げている様子。
早速 WM_SYSCOLORCHANGE も追加して投げてみるが、様子は変わらず。


では他の人はどうしているのか?と思ってUI Tweakerを試してみると・・・
こちらも同じく BaseHue だけは変更されていない模様。


しょうがないのでここでレジストリの BaseHue を削除してみる。
BaseHue はレジストリから削除されると自動的に生成されるので、テーマ変更後に削除するとどのような値が自動設定されるか興味があった。

すると、おおっ。

キタ――(゚∀゚)――!!

テーマの BaseHue が自動生成された!!!

これで自作プログラムでのテーマ変更が出来ました。
無理やり Basehue 削除をしているのですべてのテーマに適用できるか分かりませんが、とりあえずはこれで色々と試してみます。


で、参考に実際のコードはどうしているかというと、上記のQA: How to install a Today theme file? の、

  • WM_WININICHANGE の後に、WM_SYSCOLORCHANGE を投げる ( パラメータは 0,0 で )
  • 最後で BaseHue を無理やり削除

を行いました。

WM の色関係ってよく分からないですね(^^ゞ