ただのにっき
2007-03-11(日) [長年日記]
■ Vista時代の壁紙術
タイトルは「○○時代の××術」って書いてみたかっただけですすみませんすみません。Vistaなんて、ヨドバシのPC売り場でちょこっと触ったことがあるだけです。IT業界にいてそれもどうかと思うけど。
これはもったいない。
そこで、この領域を「サイドペーパー」を名づけ、この大きさにフィットする壁紙を設定してはどうかという話。
もっとも幅100ピクセルにすると縦がぜんぜん足らないので、ちょっとマヌケか。……というか、やってみたものの一気にオタクくさくなったのでこの案は却下。
■ 「サイドペーパー」設定スクリプト: sitepaper.vbs
こないだ書いたディスプレイの解像度を知りたいという話は、この「サイドペーパー」を楽に設定するためのスクリプトが欲しかったからなのだ。
で、できたのはコレなんだけど:
' ' sidepaper.vbs: set wallpaper on right-bottom side. ' Copyright (C) 2007 by TADA Tadashi <sho@spc.gr.jp>. ' Distributed under GPL. ' Function HiMetric2Pixel( himetric, logPixel ) HiMetric2Pixel = CInt( (himetric * 567 * logPixel) / (1440 * 1000) ) End Function Dim args Dim picture Dim shell Dim wmi Dim disps Set shell = CreateObject( "Wscript.Shell" ) Set args = Wscript.Arguments If args.Length < 1 Then shell.RegWrite "HKCU\Control Panel\Desktop\WallpaperOriginX", "0", "REG_SZ" shell.RegWrite "HKCU\Control Panel\Desktop\WallpaperOriginY", "0", "REG_SZ" Wscript.Echo( "Setting wallpaper offset to zero." ) Wscript.Quit End If Set picture = LoadPicture( args( 0 ) ) shell.RegWrite "HKCU\Control Panel\Desktop\WallpaperStyle", "0", "REG_SZ" shell.RegWrite "HKCU\Control Panel\Desktop\TileWallpaper", "0", "REG_SZ" shell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper", args( 0 ), "REG_SZ" Set wmi = GetObject( "winmgmts:\\.\root\cimv2" ) Set disps = wmi.ExecQuery( "Select * from Win32_DisplayConfiguration", , 48 ) For Each disp in disps width = HiMetric2Pixel( picture.Width, disp.LogPixels ) height = HiMetric2Pixel( picture.Height, disp.LogPixels ) offx = CStr( disp.PelsWidth - width ) offy = CStr( disp.PelsHeight - height ) shell.RegWrite "HKCU\Control Panel\Desktop\WallpaperOriginX", offx, "REG_SZ" shell.RegWrite "HKCU\Control Panel\Desktop\WallpaperOriginY", offy, "REG_SZ" shell.Run "RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters",0,True Wscript.Quit Next
これを「sidepaper.vbs」というファイルに保存し、その上に好きな画像ファイルをドラッグ&ドロップすればデスクトップの右下にフィットするように壁紙を設定してくれる……はずなんだけど、実は動かない。
レジストリ上の値はちゃんと設定されているはずで、何かの拍子に期待通りの表示になったりもするんだが、少なくともおれの環境では実行直後には壁紙が切り替わらない。
最近のWindowsではWallpaperOriginXが使えなくなったんだろうか(おれの知識はWindows 3.1時代のものである)と思ったが、XPで使っている記事もあるから間違ってはいなさそうである。うーん……。