SAVEIMGセーブイメージ関数

本ページには広告が含まれています。

指定したウィンドウのスクリーンショット画像を保存します。

構文
  1. void = SAVEIMG( 画像名, ID, x, y, 幅, 高さ, クライアント指定, JPEG指定, 画面取得指定 )
引数
画像名 (String = Empty)省略可
保存ファイル名(BMP/JPEG形式) (画像名を省略した場合はクリップボードへ)
ID (Integer = 0)省略可
Windowを識別するID (0 であればスクリーン全体)
X, Y (Integer)省略可
位置
幅, 高さ (Integer)省略可
大きさ
クライアント指定 (Boolean = False)省略可
FALSE
指定ウィンドウ全体 (デフォルト)
TRUE
クライアント領域
JPEG指定 (Integer = 0)省略可
1(高圧縮)~100(低圧縮) までの圧縮率を指定すると JPEGにて保存、 0(デフォルト)は BMPにて保存
画面取得指定 (#saveimg = 0)省略可
0(デフォルト)
指定アプリがフォアグランドかバックグランドかにより画面の取得方法を変更
IMG_FORE
フォアグランドとして可視画面(デスクトップ)より画像を取得
IMG_BACK
バックグランドとしてアプリより画像を取得(他画面がオーバーラップしていてもOK)
戻り値

位置

第2引数でスクリーンショット画像を撮るウィンドウのIDを指定している場合、そのウィンドウの左上の座標(x, y)=(0, 0)とする相対座標となります。そのためx,yにマイナス値を指定することも可能です。指定した座標が画面の外に来る場合、その範囲は白で埋められます。IDを指定していない場合は画面の左上の座標を(0, 0)とする絶対座標となります。

サイズ

画像のサイズは正の数を指定します。負の数を指定した場合「KansuCall:Out of system resources」のエラーが発生します。画面のサイズを超える数値を指定した場合、画面のサイズまで切り捨てられます。解像度1366x768の場合、1366x768の画像です。

使い方

ビットマップ画像を保存

アクティブウィンドウのスクリーンショット画像を「image.bmp」というファイル名で保存します。

UWSC
SAVEIMG("image.bmp", GETID(GET_ACTIVE_WIN))

JPEG画像を保存

アクティブウィンドウのスクリーンショット画像を「image.jpg」というファイル名で保存します。JPEG指定で1~100を指定したときはJPEG画像として保存されます。

UWSC
SAVEIMG("image.jpg", GETID(GET_ACTIVE_WIN),,,,,, 100)

アクティブウィンドウのスクリーンショット画像をクリップボードに送る

UWSC
SAVEIMG(, GETID(GET_ACTIVE_WIN))

スクリーン全体のスクリーンショット画像をペイントに貼る

スクリーン全体のスクリーンショット画像を一度クリップボードに送り、ペイントを起動して貼り付けます。

UWSC
SAVEIMG()

DIM ID = EXEC("mspaint")
CTRLWIN(ID, ACTIVATE)
SCKEY(ID, VK_CTRL, VK_V)

アクティブウィンドウの指定した範囲のスクリーンショットをクリップボードに送る

アクティブウィンドウのx=0,y=0から幅100,高さ100のスクリーンショット画像をクリップボードに送ります。

UWSC
SAVEIMG(, GETID(GET_ACTIVE_WIN), 0, 0, 100, 100)

プログラム実行例

表示されているすべてのウィンドウのスクリーンショットを保存

UWSC
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

DIM folderspec = "D:\Desktop\Screenshot"
IF FSO.FolderExists(folderspec) = FALSE THEN FSO.CreateFolder(folderspec)

FOR n = 0 TO GETALLWIN() - 1
	DIM ID = ALL_WIN_ID[n]
	IFB STATUS(ID, ST_VISIBLE) = TRUE		
		DIM filename = ID + "_" + STATUS(ID, ST_TITLE)
		filename = PathCleanupSpec(filename)
		DIM path = FSO.BuildPath(folderspec, filename)
		path = uniqueFilename(path)
		SAVEIMG(path, id)
	ENDIF
NEXT

//////////////////////////////////////////////////
// 【引数】
//   filename : 使えない文字を削除するファイル・フォルダ名 
// 【戻り値】
//   ファイル名として使えない文字を削除した文字列 
//////////////////////////////////////////////////
FUNCTION PathCleanupSpec(filename)
	DIM filenameErrChar[12] = "\", "/", ":", "*", "?", "<#DBL>", "<#CR>", "<#TAB>", "<", ">", "|", "[", "]"
	FOR item IN filenameErrChar
		filename = REPLACE(filename, item, "")
	NEXT
	RESULT = filename
FEND

//////////////////////////////////////////////////
// 【引数】
//   path : ファイルのパス 
// 【戻り値】
//   重複しないファイル名 
//////////////////////////////////////////////////
FUNCTION uniqueFilename(path)
	DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
	IFB FSO.FileExists(path) THEN
		DIM fol = FSO.GetParentFolderName(path)
		DIM filename = FSO.GetBaseName(path)
		DIM extension = FSO.GetExtensionName(path)
		DIM i = 2
		WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension))
			i = i + 1
		WEND
		RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension)
	ELSE
		RESULT = path
	ENDIF
FEND
使用関数
解説

画像をクリップボードにコピーする

Alt+Sでマウスカーソル下のオブジェクトのスクリーンショット画像をクリップボードにコピーします。

UWSC
SETHOTKEY(VK_S, MOD_ALT, "imageToClipboard")
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

WHILE TRUE
	SLEEP(0.01)
WEND

PROCEDURE imageToClipboard()
	SAVEIMG( , GETID(GET_FROMPOINT_WIN))
FEND

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE forceQuit()
	EXITEXIT
FEND
解説

関連記事

CHKIMG関数 (スクリプト関数)
指定画像が画面上にあるかチェックしあればその情報を返します。
altClick関数 (自作関数)
Web上(IE)の指定したalt属性を含む画像をクリックします。
getBitmap関数 (自作関数)
引数に指定したビットマップ画像のサイズ・幅・高さ・ビットの深さを配列で返します。
PEEKCOLOR関数 (スクリプト関数)
PEEKCOLOR関数は、指定座標の色を取得する関数です。