【コピペでOK】クリックでスクリーンショット~UWSC~

2023年12月28日木曜日

UWSC

■はじめに

UWSCで画像判定用の画像を用意するために作成したスクリプトを紹介します。
画像判定用の画像は、PrintScreenキーで保存したものではうまくいきません

画像判定の画像を用意する手軽な方法は、以下2つです。

  1. フリーソフト『WinShot』を利用する
  2. UWSCのSAVEIMG関数を使って準備

この記事では、2のSAVEIMG関数を使って画像を準備する方法を使用します。

個人用のメモですが、どなたかの参考になれば幸いです。

◆この記事でわかること

  • UWSCを使って画面を保存する方法(SAVEIMG関数)
  • UWSCを使って日付時刻を取得する方法(GETTIME関数)
  • キー情報取得方法(GETKEYSTATE関数)

■サンプルコード

ご紹介するスクリプトは次のような機能を持っています。

◆機能

  • 左クリックでデスクトップ全体のスクリーンショットを取得。
  • ファイル名は「スクショ_年月日-時分-秒」で保存。
  • ESCキーで終了する。
//---------------------------------------
//	機能: 左クリックでスクリーンショット保存。
//	用途: 画像診断用の画像取得、手順書の作成など
//---------------------------------------
fukidasi("左クリック:スクショ<#CR>ESC:終了")

newkey = FALSE
oldkey = FALSE
folder = ".\shot\"    //保存フォルダ

//保存フォルダがなければ作成
if folder <> "" and fopen(folder, F_EXISTS) = FALSE then
	res = Doscmd("mkdir " + folder)
endif

//メインループ
while True
    sleep(0.2)
    oldkey = newkey
    newkey = getkeystate(VK_LBUTTON)

    if newkey = True and oldkey = False then    //左クリックでスクショを保存
        gettime()
        img_name = folder + "スクショ_" + G_TIME_YY4 + G_TIME_MM2 + G_TIME_DD2 + "-" + G_TIME_HH2 + G_TIME_NN2 + "-" + G_TIME_SS2
        //画像保存
        Saveimg( img_name )    //BMP
        //Saveimg( img_name, , , , , , , 80, 0 )    //JPEG		
    endif

    if getkeystate(VK_ESC) then    // ESCで終了で終了
        break
    endif
wend

画像をトリミングして保存

ご紹介するスクリプトは次のような機能を持っています。

◆機能

  • スクショを指定した2点間の部分のみ保存。
  • Shift+左クリック1回目でスクショの始点設定。
  • Shift+左クリック2回目でスクショの終点設定+保存。
  • ファイル名は「スクショ_年月日-時分-秒」で保存。
  • ESCキーで終了する。
//---------------------------------------
//	機能: Shift押しながらクリック2回でスクショ
//    (クリック1回目が始点、2回目が終点)
//	用途: 画像診断用の画像取得、手順書の作成など
//---------------------------------------
fukidasi("Shift+左クリック2回:スクショ<#CR>ESC:終了")

newkey = FALSE
oldkey = FALSE
shiftkey = False
startx = 0
starty = 0
endx = 0
endy = 0
set_status = 0
folder = ".\shot\"


//格納先確認。なければ作成
if folder <> "" and fopen(folder, F_EXISTS) = FALSE then
	res = Doscmd("mkdir " + folder)
endif


//メインルーチン
while True
	sleep(0.2)
	//mes = "mouse: " + G_MOUSE_X + "," + G_MOUSE_Y
	oldkey = newkey
	newkey = getkeystate(VK_LBUTTON)
	shiftkey = getkeystate(VK_SHIFT)
	if newkey = True and oldkey = False and shiftkey = True then		// 左クリックでスクショを保存
		if set_status = 0 then
			startx = G_MOUSE_X
			starty = G_MOUSE_Y
			//mes = "set: " + G_MOUSE_X + "," + G_MOUSE_Y
			fukidasi("set_start: " + startx + "," + starty)
			set_status = 1
		elseif set_status = 1
			endx = G_MOUSE_X
			endy = G_MOUSE_Y
			swap(startx, endx)
			swap(starty, endy)
			fukidasi("set_start: " + startx + "," + starty + "<#CR>" + "set_end:" + endx + "," + endy )
			set_status = 2
		endif
	
		if set_status = 2 then
			gettime()
			img_name = folder + "スクショ-レンジ_" + G_TIME_YY4 + G_TIME_MM2 + G_TIME_DD2 + "-" + G_TIME_HH2 + G_TIME_NN2 + "-" + G_TIME_SS2
			//	画像保存
			Saveimg( img_name, 0, startx, starty, endx - startx, endy - starty )						// BMP
			//Saveimg( img_name, , , , , , , 80, 0 )	// JPEG		
			set_status = 0
			startx = 0; starty = 0
			startx = 0; startx = 0
		endif
		
		//fukidasi(mes)
		
	endif
	
	if getkeystate(VK_ESC) then		// ESCで終了で終了
		break
	endif
wend


function swap(var a, var b)
	res = 0
	if a < b then    //入れ替えない
		res = 0
	elseif a > b then    //入れ替え
		t = a
		a = b
		b = t
		res = 1
	endif
	result = res
fend
Shift+右クリック設定ですが、Shiftだと都合が悪い場合もあります。
ShiftをCtrlやAltに変更したい場合、VK_SHIFTの部分を、VK_CTRLやVK_ALTに変更してください。

QooQ