現在表示している窓を、"日時.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