I decided to take a little break this weekend and do something that I've been wanting for a little while. What is it you might ask? Well, it seems rather dumb, but I like for my wallpaper to change. Now, when I was back in X Windows land, this was simple. Perl, crontab, and voila changing wallpapers. It seems to be more a challenge on windows. So, I dusted off google and found the solution. I implemented it in a quick and dirty little ruby script. All I did was put all of my images (already converted to bmp) into one directory and it cycles between them all. Nothing sexy really. I've just been curious on how to do this on windows. I have Squeak that changes my wallpaper of my current project. So, I wanted it all of the time. I'm a happy boy now. Here it is (like I said, it is ROUGH)
require 'win32/registry'
#show bmp in file_name stretched
def show_wallpaper(file_name)
Win32::Registry::HKEY_CURRENT_USER.open('Control Panel\Desktop', Win32::Registry::KEY_ALL_ACCESS) do |reg|
reg['Wallpaper', Win32::Registry::REG_SZ] = file_name;
reg['WallpaperStyle', Win32::Registry::REG_SZ] = 2;
reg['TileWallpaper', Win32::Registry::REG_SZ] = 0;
end
`RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters`
puts "Showing: #{file_name}"
end
#Obtain the next file to use as wallpaper. Basically, cycle through the directory
def next_file_name(current_file_name)
found = false
first_file_name = nil
Dir['C:/wallpaper/*.bmp'].each do | any |
first_file_name = any unless first_file_name
return any if found
found = true if any == current_file_name
end
first_file_name
end
#Get the current wallpaper file
current_file_name=nil
Win32::Registry::HKEY_CURRENT_USER.open('Control Panel\Desktop') do |reg|
current_file_name=reg['Wallpaper', Win32::Registry::REG_SZ]
end
#get the next and then show
image_file_name = next_file_name(current_file_name.gsub(/[\\]/, '/'));
show_wallpaper(image_file_name) if image_file_name
That's it! It's amazing how little information there is. I found changing the registry only by chance. And then, it will not update. Calling the rundll32 command by pure chance. It was a good learning experience and it makes me a little bit of a happier boy. One more note, I converted all of my jpg and gifs to bmp via Squeak. I couldn't find any conversion image stuff for Ruby. If anyone knows of any, let me know. Now, back to Fox/Ruby land for work on my Trail Blazer inspired tool...=)
1 comment:
The most used graphic library in Ruby is probably RMagick, which is a binding to ImageMagick. Converting a file is also rather easy: http://studio.imagemagick.org/RMagick/doc/comtasks.html#convert
Enjoy Ruby :) If one day we could have Ruby's pragmatism and Smalltalk's IDE, we'd show those Java boys...
Post a Comment