現在表示している窓を、"日時.jpg"というファイル名で保存するスクリプト。
まあ要するにウィンドウタイトルを指定して、jpgファイルに保存したり、「次ページボタン」を自動でマウスクリックさせながら、ソートされたファイル名で指定したディレクトリ配下に保存する、ということがやりたくて作成した。
「自動マウスクリック」は Win32API の mouse_event() で実現してる。
画像保存は、Doodle2 で実現してる。
~/s/a/w2j.rb:0:
#!/usr/bin/ruby -Ks # -*- coding: shift_jis -*- # [TBD] winTitle指定で正規表現を使って指定できる様にする? (winListとかを使えば可能だが、イマイチスマートじゃない…) require 'win32ole' require 'Win32API' require 'optparse' def w2j(d,winTitle,fname) if winTitle == '@CLIP' # 特別扱いでクリップボードを保存 d.LoadFromClipboard(1, 0, 0, 0, 0)# ([ClearFlag], [appendload], [X1], [Y1], [CPmode]) else d.CaptureWindow(winTitle)# 上記以外:指定されたタイトルの窓を保存 #d.CaptureWindow("") # デスクトップを保存 end d.SaveToFile(fname, 0, 0, 0) end ################ こっから実際の処理 ################ t = Time.now dir = ENV['HOME']+t.strftime("/g/%Y/") winTitle = '@ACTIVE' # 現在アクティブなウィンドウ jpegQuality = 75 quickSaveName = nil beep = nil # 前の使い方は「w2j [枚数(loopCount)] [sleepSec] [dir]」だった。 if ARGV.size == 3 and /^\d+$/ =~ ARGV[0] loopCount,sleepSec,dir = ARGV[0].to_i, ARGV[1].to_i, dir+ARGV[2] startUpSleepSec = sleepSec else loopCount,sleepSec,dir = 1,1,dir+t.strftime("%m") startUpSleepSec = sleepSec OptionParser.new do |opt| opt.on('-l','--loop loopCount') {|v| loopCount = v.to_i} opt.on('-d','--dir dir') {|v| dir = v} opt.on('-s','--sleep sleepSec') {|v| sleepSec = v.to_i} opt.on('-S','--Start_up_sleep sleepSec') {|v| startUpSleepSec = v.to_i} opt.on('-w','--window winTitle') {|v| winTitle = v} opt.on('-j','--jpeg jpegQuality'){|v| jpegQuality = v.to_i} opt.on('-q','--quick-save fileName'){|v| quickSaveName = v} opt.on('-B','--Beep_if_finished'){ require 'beep' beep = Beep.new 'レソシれ,シれーー' } opt.parse!(ARGV) end end mouse_event = Win32API.new('user32.dll', 'mouse_event', %w(i i i i i), 'i') d = WIN32OLE.new("Doodle2.MyCanvas") d.JPEGCompressionQuality = jpegQuality sleep startUpSleepSec # TBD if quickSaveName # quickSaveName を指定された時は、カレントディレクトリに指定した名前で保存してすぐ終了!! w2j(d, winTitle, quickSaveName) exit end unless File.directory?(dir) require 'fileutils' FileUtils.mkdir_p(dir) end # 余計なお世話かもしれんが、dos風の path に変換しておく dir = `cygpath -m "#{dir}"`.chomp loopCount.times do mouse_event.call(2,0,0,0,0)#MouseLeft Down mouse_event.call(4,0,0,0,0)#MouseLeft Up sleep(sleepSec) t = Time.now fname = dir + t.strftime('/%d_%H%M%S.jpg') w2j(d, winTitle, fname) end if beep beep.play end