Windowsスクリーンショット撮影サーバをdRubyで作って、Macから呼んでみる。
以下の手順であっけなく、MacでWindowsのデスクトップ画像を取得できました。が、Parallelsの解像度はXGA,SXGA等の規格に沿ったものでないと撮影に失敗する模様。
2.撮影用サーバをdRubyで書く。
RMagickを入れてPNGに変換しようかしらと思ったが、撮影用の小さなアプリにそれは大げさすぎ。ネットを徘徊していてよいエントリを発見。
http://info.skypeint.net/?eid=169993
なるほど。ZLibを使って圧縮だけして加工は取ってきてからすれば良しと。
というわけで以下のようなサーバを作成。
require 'rubygems' require 'win32screenshot' require 'zlib' require 'drb/drb' class ScreenShot def initialize(stream=$stdout) @stream = stream end def shot width, height, data = Win32::Screenshot.desktop #File.open("screenshot.bmp", "wb") { |io| io.write(data) } compression = Zlib::Deflate.deflate(data) @stream.puts "Shot! #{width}, #{height}" return compression end end uri = ARGV.shift DRb.start_service(uri, ScreenShot.new) puts DRb.uri sleep
3.クライアントコードを書く。
取ってきた圧縮データを展開してBMP形式で保存するだけ。
require 'drb/drb' require 'zlib' scrshot = DRbObject.new_with_uri ARGV.shift compbmp = scrshot.shot bitmap = Zlib::Inflate.inflate(compbmp) File.open('shot.bmp', 'wb') { |io| io.write bitmap }