Table of Content
目的
SikuliX1.1.4ではスクリーンを監視して変更が生じたらスクリーンキャプチャをとることが容易に可能である。
これにより、スクリーンキャプチャの苦行の労力を減らせるかを検討する。
Sikulix1.1.4については下記参照
https://needtec.sakura.ne.jp/wod07672/?p=9202
コード
from datetime import datetime
import threading
import time
import sys
# 保存先のフォルダ
captureFolder = "C:\\tool\\sikulix\\log\\"
# 50ピクセル変更したらchangedを呼び出す。ここで調整する
changePixel = 50
threadWaitStopFunc = None
stopFlg = False
# 停止用のスレッド
def waitStopFunc():
global stopFlg
popup(u"キャプチャを停止する場合は [OK]を押下してください")
stopFlg = True
# 範囲内の変更発生時のイベント
def changed(event):
global stopFlg
global threadWaitStopFunc
print ('changed' + datetime.now().strftime('%Y%m%d_%H%M%S%f')[:-3])
try:
capture(selRegion, captureFolder, datetime.now().strftime('%Y%m%d_%H%M%S%f')[:-3])
except:
print(sys.exc_info())
stopFlg = True
# 範囲選択が表示されてRegionを選択する
selRegion = selectRegion(u"select caputure region.")
if selRegion is None:
exit(1)
selRegion.onChange(changePixel, changed)
# 監視 alt-shift-c
selRegion.observeInBackground(FOREVER);
threadWaitStopFunc = threading.Thread(target=waitStopFunc)
threadWaitStopFunc.start()
while True:
if stopFlg:
break
wait(1)
popup(u'キャプチャが停止しました')
selRegion.stopObserver()
※画像ファイルの作成に失敗した場合は「キャプチャが停止しました」というウィンドウが表示されるので、その場合は保存フォルダを見直す。
使ってみる
-
実行すると矩形が選択できるので、監視したい範囲を選択する。
-
以下のポップアップが表示されるのでOKを押さないで邪魔にならない位置にどかしておく
監視を終了したくなったらOKをおして処理を停止する。 -
監視対象の画面を操作する。
今回はコマンドプロンプトにて以下の操作を行った
・dirコマンド実行
・プロパティを表示 -
3の操作後に作成された画像ファイル
使用感
・一文字づつのキー押下や、ウィンドウが表示される過程の半透明のものもキャプチャされてしまう
・とはいえ、一枚一枚心を込めてスクリーンショットを撮る苦行よりはまし。
(あとで間引くか、大した量でないならそのまま納品でいいはず)
・同様のことは動画でもできる。
ただ、画像で保存するアドバンテージとしては吹き出しつけたりの編集の容易性。
感動的なツールだな、だが、無意味だ。※
※SikuliX1.1.4は64bitのJavaが必要なので、こういうのが本当に必要な職場はどうせ、32ビットマシンしか支給されていないので使えない。仕方ないね。