喫茶XRAYトップページ

[スレッド全体
]

[7509] Windows 7 の壁紙を変更したい(スライドショー)のですが?返信 削除
2014/4/20 (日) 00:05:24 あさやん
%APPDATA%\Microsoft\Windows\Themes\slideshow.ini にいろいろと設定すれば何とかなりそうなのですが,
UUEncodeでつまずいています。
Delphi7でUUencodeのデコードしてみたのですが意味不明な文字に
にか情報をお持ちでしたら教えてください。

参考URL
http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/cb564e1a-778b-47a9-a0de-0a815159e46a/windows-7-theme-modification?forum=windowsgeneraldevelopmentissues

[7510] Re:Windows 7 の壁紙を変更したい(スライドショー)のですが?返信 削除
2014/4/20 (日) 11:02:03 Mr.XRAY
▼ あさやんさん

へぇー,Windows 7 では壁紙のスライドショーができるんですね.
知りませんでした.
昔は,常駐アプリにして,設定した時間ごとに壁壁を変えるように
していたようです.Vector には,いまでも登録されているのではないでしょうか.

下の図のように設定すると,slideshow.ini というのができました.
見てみると,ImagesRootPIDL にやたら AAAAAA... というのがあります.
PIDL という名前からして,おそらく,項目識別子ではないかと思います.

  PSHItemID = ^TSHItemID;
  {$EXTERNALSYM _SHITEMID}
  _SHITEMID = record
    cb: Word;
    abID: array[0..0] of Byte;
  end;
  TSHItemID = _SHITEMID;
 
という構造体です(Delphi XE の Shlobj.pas 内の定義).
バイト配列が文字列で格納されているようですが,はて,...

で,Google で「Wallpaper Slidesshow Msdn」で検索したら,

[IDesktopWallpaper interface (Windows)]
http://msdn.microsoft.com/en-us/library/windows/desktop/hh706946%28v=vs.85%29.aspx

SetSlideshow というメソッド,
SetSlideshowOptions method というメソッドがありますね.
しかし,このインターフェイスは,Delphi XE5 までには実装されていません.

以前は,IActiveDesktop interface で壁紙の設定ができました.
これは,かなり前の Delphi でも実装されています (ShlObj.pas)
http://msdn.microsoft.com/en-us/library/bb776357%28v=vs.85%29.aspx

で,どうしましょう ?


[7511] Re2:Windows 7 の壁紙を変更したい(スライドショー)のですが?返信 削除
2014/4/20 (日) 11:53:12 Mr.XRAY
> しかし,このインターフェイスは,Delphi XE5 までには実装されていません.

Delphi に移植しようとしてみたら,
Microsoft SDKs Windows\v7.1 のヘッダファイルには定義ないですね.
新しいのをインストールすればあるかも知れません.


[7512] Re3:Windows 7 の壁紙を変更したい(スライドショー)のですが?返信 削除
2014/4/20 (日) 12:38:23 Mr.XRAY
> Microsoft SDKs Windows\v7.1 のヘッダファイルには定義ないですね.
> 新しいのをインストールすればあるかも知れません.


ハハハッ.DesktopWallpaper interface は Windows 8 からなんですね.
Windows 7 では使えないということです.


[7513] Re4:Windows 7 の壁紙を変更したい(スライドショー)のですが?返信 削除
2014/4/20 (日) 14:26:08 あさやん
▼ Mr.XRAYさん
> > Microsoft SDKs Windows\v7.1 のヘッダファイルには定義ないですね.
> > 新しいのをインストールすればあるかも知れません.
>
> ハハハッ.DesktopWallpaper interface は Windows 8 からなんですね.
> Windows 7 では使えないということです.


ありがとうございます。

ImagesRootPIDL is uuencoded PCIDLIST_ABSOLUTE  struct とのことなので
頂いた情報から悪あがきしてみます。
Delphi D7 では無理なのかもしれませんが...。




[7514] 壁紙のスライドショー Windows 7返信 削除
2014/4/20 (日) 16:06:00 Mr.XRAY
▼ あさやんさん

ちょっと思ったのですが,ImagesRootPIDL は項目識別子なのですから,
普通のパスで指定したらどうなるのか ? とテストしてみました.
参考にしたのは,以下の MSDN の記事です.

http://msdn.microsoft.com/en-us/library/windows/desktop/bb773190%28v=vs.85%29.aspx#slideshow_settings

slideshow.ini の内容をテキストエディタで以下のようにして保存しました.

[Slideshow]
Interval=10000
Shuffle=1
ImagesRootPath=D:\デジカメ画像\20140418           //ここはフォルダの設定
Item0Path=D:\デジカメ画像\20140418\IMG_0298.JPG   //以下,フォルダ内のファイル名
Item1Path=D:\デジカメ画像\20140418\IMG_0299.JPG
Item2Path=D:\デジカメ画像\20140418\IMG_0292.JPG

で,PC を再起動したら,スライドショーになりました.
ということは,ini ファイルを書き変えた後にシステムに変更通知の
メッセージを送信すれば,再起動しなくても適用できそうな気がします.
ただ,この場合にどのようなメッセージが必要なのかは確認していません.

あさやんさんが確認して,この掲示板の皆さんに教えて頂ければ
嬉しいのですが.
(簡単なサンプルコードだと,なお,嬉しいです)

なお,Interval は 10000 が最小値のようです.
これは,[コントロールパネル] [個人設定]からもそうなっています.


[7515] Re:壁紙のスライドショー Windows 7返信 削除
2014/4/20 (日) 16:10:55 Mr.XRAY
> 参考にしたのは,以下の MSDN の記事です.
>
> http://msdn.microsoft.com/en-us/library/windows/desktop/bb773190%28v=vs.85%29.aspx#slideshow_settings


このページは,Google で「slideshow.ini Format MSDN」で検索した結果です.


[7525] Re2:壁紙のスライドショー Windows 7返信 削除
2014/4/22 (火) 15:41:53 Mr.XRAY
知り切れトンボみたいのはちょっと気になるので,サンプルにしました.

[07_Windows 7 以降の壁紙スライドショーの設定]
http://mrxray.on.coocan.jp/Delphi/plSamples/S02_SystemParametersInfo_Destop.htm#07


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82