クリップボードの画像を楽チンに保存し鯛…
Windows で画面のスナップショットを撮る場合、キーボードから…
| PrtSc (Print Screen) | … | フルスクリーンのキャプチャ |
| Alt + PrtSc (Print Screen) | … | アクティブウィンドウのキャプチャ |
…で、キャプチャした画像がクリップボードに格納されますよね。
今までは、上記のショートカットキーでクリップボードに取り込んだ画像を、 XnView などを立ち上げてファイルに保存してました。これでも大したストレスは無かったんですけど…。
もっとサクッとファイルに保存し鯛…と、思って ruby で書いてみました。
下記スクリプトは gem でインストールした win32-clipboard を使っています。
クリップボードに画像が格納されている場合のみ、ファイルに保存されます。 Excel のグラフやセルの内容も画像として保存できるようです。
#!/usr/bin/ruby
# $Id: $
# tiny script to save image data in clipboard.
require 'rubygems'
require 'win32/clipboard'
DEF_clip2png_file = 'clipboard.png' # default filename to output
filename = String.new
if ENV['clip2png_file'] # environment variable 'clip2png_file' exists?
filename = ENV['clip2png_file'] # then use it
else
filename = DEF_clip2png_file # else use the default file name.
end
if Win32::Clipboard.format_available?(Win32::Clipboard::DIB) # clipboard contains image data ?
File.open(filename, 'wb') { |file| # then save the data into a file
file.write Win32::Clipboard.data(Win32::Clipboard::DIB)
}
end
環境変数 'clip2png_file' で保存先ファイルが指定してあれば、そのファイル名で保存されます。指定していなければデフォルトの 'clipboard.png' というファイル名で保存されます。
スクリプトをショートカットから実行する場合は、プロパティで開始フォルダを指定しておけば、そこに保存されます。
実はまだ全然理解していませんが、ファイル名の拡張子を png にすれば png で、 jpg にすれば jpeg で、 bmp にすれば Windows bitmap の形式で保存されるようです(ホント?)。他の拡張子は試してません。 2010/02/01 追記: やっぱりどうも勘違いみたいでした…トホホ
当初、キャプチャ → 保存をまとめて自動化したいと思って、下記のように Print Screen や Alt + Print Screen のキーイベントも送信してしまおうか…と思いましたが、 Excel などからコピーしたデータを使う場合を考えて、シンプルにしておくことにしますた…というメモ。
あ、動作確認は取り敢えず WinXP Professional SP2 と下記2種類の ruby の組み合わせです。
ruby 1.8.5 (2006-08-25) [i386-mswin32]
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]
追記:
ruby 1.8.7 (2009-12-24 patchlevel 248) [i386-mswin32] でも当然ながら動作しました。
require 'Win32API'
VK_SNAPSHOT = 0x2C # PrintScreen
VK_LMENU = 0xA4 # Left Alt
KEYEVENTF_KEYUP = 2 # Key up flag
KEYEVENTF_EXTENDEDKEY = 1 # Extended scan code flag
# VOID keybd_event(
# BYTE bVk, // Virtual Keycode
# BYTE bScan, // Hardware Scancode
# DWORD dwFlags, // Flags
# ULONG_PTR dwExtraInfo // Additional Keystroke data
# );
keybd_event = Win32API.new('user32', 'keybd_event', %w(i i i p), 'v')# send PrtSc event (capture whole screen)
keybd_event.call(VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY | 0, 0)
keybd_event.call(VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0)# send Alt + PrtSc event (capture active window)
keybd_event.call(VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY | 0, 0)
keybd_event.call(VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY | 0, 0)
keybd_event.call(VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0)
keybd_event.call(VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0)
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- AmigaOSのHDDジオメトリ (つづき)(2017.05.29)
- AmigaOSのHDDジオメトリ (つづく…)(2017.05.23)
- Firefox41 で .keysnail.js がエラーしてた件(2015.10.12)
「スクリプティング」カテゴリの記事
- Android の adb backup から一部だけリストアしちゃー(2014.08.22)
- Python の正規表現が激遅だと思ったら(2013.05.27)
- Pythonの日本語版HTMLヘルプ再構築(2013.03.07)
- migemo の ruby 1.9 対応 (NTEmacs + Cygwin)(2012.10.30)
この記事へのコメントは終了しました。


コメント