見出し画像

ネット上の資産を活かす【UWSC】

必要なものを探すことさえできれば活用することができる
オリジナルのソース元を見つけられませんでしたが、「使ってます」というコードの紹介です。オリジナルのソース元を見つけた際にリンクさせていただきます。

マウスポインタ下の座標と色を表示
オリジナルのソース元を発見することはできませんでしたが、こちらが便利だと思います。対象の画面で座標取得が必要な場所がたくさんあるのはいつものことなので、プリントスクリーンをして紙に出力した後、線を引いて座標を記入しています。色の変化を取得する際も色と座標を同時に取得できるので、ひとつのプログラムで両方こなせます。

//マウスポインタ下の座標と色を表示
PRINT GET_UWSC_NAME

	dim srcX1="status(id,ST_X)", srcY1="status(id,ST_Y)"
	dim srcX2="status(id,ST_CLX)", srcY2="status(id,ST_CLY)"
	dim strL,strXW,strYW,strColor16
	dim i
	dim nX,nY

WHILE True 
	// カーソル下のウィンドウが対象
	ID = GETID(GET_FROMPOINT_WIN)
	// 絶対座標
	x1 = G_MOUSE_X
	y1 = G_MOUSE_Y
  // 相対座標
  x2 = x1 - STATUS(ID, ST_X)
  y2 = y1 - STATUS(ID, ST_Y)

	// peekcolor
	for i=1 to 2
		strXW=eval("srcX"+i); strYW=eval("srcY"+i)
		nX=eval("G_MOUSE_X-"+strXW); if 0>nX then nX="("+nX+")"
		nY=eval("G_MOUSE_Y-"+strYW); if 0>nY then nY="("+nY+")"
		strL="peekcolor("+strXW+"+"+nX+","+strYW+"+"+nY+")"
		strColor16=getColor16(eval(strL))
	//	fput(fp,strL+"<#TAB>="+strColor16)
	next
	strL="peekcolor(G_MOUSE_X,G_MOUSE_Y)"
	//fput(fp,strL+"<#TAB>="+getColor16(eval(strL)))

  c1 = PEEKCOLOR( G_MOUSE_X,G_MOUSE_Y)
  s = "絶対座標 x:" + x1 + " y:" + y1 + "<#cr>"
  s = s + "相対座標 x:" + x2 + " y:" + y2+ "<#cr>"
  s = s + " 座標色  :" + c1+" "+ strColor16
  // 戻す
  MOUSEORG(0)
  Fukidasi(s, 10, 10, 0) 
  Sleep(0.1) 
WEND 

//--------------------
// BGR値を10進数から16進数に変換
// (入力値)decimalNum	BGR値10進数(= peekcolor()関数の戻り値)
// (戻り値)result		BGR値16進数(= fukidasi()関数の引数)
//--------------------
function getColor16(decimalNum)
	if 0=decimalNum then decimalNum=1
	dim strW1="00000"+format(decimalNum,0,-1)
	result="$"+copy(strW1, length(strW1)-5,6)
fend

マウスポインタ下のテキスト表示
オリジナルのソース元を発見することはできませんでしたが、こちらが便利だと思います。テキスト取得の選択肢のひとつです。座標指定で取得しなければならないときに、POSACC関数で取得できるのか、できなければ複数クリック、キー操作の組み合わせ、範囲指定などを組み合わせて取得します。
プリントスクリーンをして紙に出力した後、線を引いて座標を記入しています。POSACC関数で取得できる場合とできない場合がありますが、ひとつのプログラムで両方こなせます。

//マウスポインタ下の座標とテキスト表示
PRINT GET_UWSC_NAME
WHILE True 
	// カーソル下のウィンドウが対象
	ID = GETID(GET_FROMPOINT_WIN)
	// 絶対座標
	x1 = G_MOUSE_X
	y1 = G_MOUSE_Y
  // 相対座標
  x2 = x1 - STATUS(ID, ST_CLX)
  y2 = y1 - STATUS(ID, ST_CLY)
  s = "絶対座標 x:" + x1 + " y:" + y1 + "<#cr>"
  s = s + "相対座標 x:" + x2 + " y:" + y2
  s = s + " POSACC :"+(POSACC(ID, x1 - STATUS(ID, 間ST_CLX), y1 - STATUS(ID, ST_CLY), ACC_ACC))
  // 戻す
  MOUSEORG(0)
  Fukidasi(s, 10, 10, 0) 

  Sleep(0.1) 
WEND 

日付と時間の計算
オリジナルのソース元を発見することはできませんでしたが、こちらが便利だと思います。日付だけ、時間だけという計算はよくあるのですが、日付と時間で差を計算したいケースがあり、その際に参考にさせていただきました。

//日付と時間の計算
GETTIME(0, "1899/12/30 00:00:00")
date1= G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" "+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2
PRINT "date1:"+date1+" "+G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" " _
+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2

gettime()
date2=G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" "+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2
PRINT "date2:"+date2+" "+G_TIME_YY+"/"+G_TIME_MM2+"/"+G_TIME_DD2+" " _
+G_TIME_HH2+":"+G_TIME_NN2+":"+G_TIME_SS2

uwscTime=gettime()
シリアル値 =getSerialTime(uwscTime)
print "getSerialTime:"+ シリアル値

来月の末日付=getEndOfMonth(date2, 1)
print "getEndOfMonth:"+ 来月の末日付

日付判定=isDate(date2)
print "isDate:"+ 日付判定

差日数=dateDiff("d", date1, date2)
print "dateDiff:"+ 差日数

曜日判定=getWeekday(date2) 
print "getWeekday:"+ 曜日判定 //  曜日 (0:日曜…、6:土曜) 


//////////////////////////////////////////////////
// 【引数】
//  uwscTime : GETTIME関数で取得した時間 
// 【戻り値】
//  シリアル値 
//////////////////////////////////////////////////
FUNCTION getSerialTime(uwscTime)
	RESULT = (uwscTime - GETTIME(0, "1899/12/30 00:00:00")) / 86400
FEND
//////////////////////////////////////////////////
// 【引数】
//  interval : 加算する時間間隔を表す文字列式(yyyy:年、m:月、d:日、ww:週、h:時、n:分、s:秒) 
//  num : dateに加算する値。未来は正、過去は負で指定 
//  date : 時間間隔を加算する日付 
// 【戻り値】
//  日時(date)に、指定した単位(interval)の時間(num)を加算して返します 
//////////////////////////////////////////////////
FUNCTION dateAdd(interval, num, date)
	DIM year, month, day, d
	GETTIME(0, date)
	DIM time = G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2
	SELECT interval
		CASE "yyyy"
			d = (G_TIME_YY + num) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
			IF time <> "00:00:00" THEN d = d + " " + time
		CASE "m"
			IFB num > 0 THEN
				year = G_TIME_YY + INT((G_TIME_MM + num) / 12)
				month = REPLACE(FORMAT(((G_TIME_MM + num) MOD 12), 2), " ", "0")
			ELSE
				year = G_TIME_YY + CEIL((G_TIME_MM + num) / 12 - 1)
				month = REPLACE(FORMAT(G_TIME_MM - (ABS(num) MOD 12), 2), " ", "0")
			ENDIF
			IF month = "00" THEN month = 12
			day = G_TIME_DD2
			d = "" + year + month + day
			IFB !isDate(d) THEN
				d = year + "/" + month + "/" + "01"
				d = getEndOfMonth(d)
			ELSE
				d = year + "/" + month + "/" + day
			ENDIF
			IF time <> "00:00:00" THEN d = d + " " + time
		CASE "d"
			t = GETTIME(num, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "ww"
			t = GETTIME(num * 7, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "h"
			t = GETTIME(num / 24, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "n"
			t = GETTIME(num / 1440, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "s"
			t = GETTIME(num / 86400, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
	SELEND
	RESULT = d
FEND

//////////////////////////////////////////////////
// 【引数】
//  date : 日付(”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”) 
//  m : 第一引数の指定日からプラスマイナスm月とする 
// 【戻り値】
//  dateからm月後の月末の日付 
//////////////////////////////////////////////////
FUNCTION getEndOfMonth(date, m = 0)
	date = dateAdd("m", m + 1, date)
	GETTIME(0, date)
	GETTIME(-G_TIME_DD, date)
	RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
FEND

//////////////////////////////////////////////////
// 【引数】
//  expr : 評価する式 
//  truepart : 評価した式がTrueのときに返す値 
//  falsepart : 評価した式がFalseのときに返す値 
// 【戻り値】
//  truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき 
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//  date : 存在するかを調べる日付文字列。YYYYMMDD or YYYY/MM/DD or YYYY-MM-DDのいずれかの形式。 
// 【戻り値】
//  TRUE : 日付として認識できる、FALSE : 日付として認識できない 
//////////////////////////////////////////////////
FUNCTION isDate(date)
	TRY
		GETTIME(0, date)
		RESULT = TRUE
	EXCEPT
		RESULT = FALSE
	ENDTRY
FEND
//////////////////////////////////////////////////
// 【引数】
//   interval : 時間単位(yyyy 年、q:四半期、m 月、d 日、w:週日、ww:週、h:時、n:分、s:秒) 
//    date1 : 日時1 
//    date2 : 日時2 
//  【戻り値】
//    date2からdate1を引いた時間間隔を求めます。 
//////////////////////////////////////////////////
FUNCTION dateDiff(interval, date1, date2)
	DIM y1, y2, m1, m2, d1, d2, d
	SELECT interval
		CASE "yyyy"
			GETTIME(0, date1)
			y1 = G_TIME_YY
			GETTIME(0, date2)
			y2 = G_TIME_YY
			d = y2 - y1
		CASE "q"
			GETTIME(0, date1)
			y1 = G_TIME_YY
			m1 = G_TIME_MM
			GETTIME(0, date2)
			y2 = G_TIME_YY
			m2 = G_TIME_MM
			d = y2 * 4 + CEIL(m2/3) - (y1 * 4 + CEIL(m1/3))
		CASE "m"
			GETTIME(0, date1)
			y1 = G_TIME_YY
			m1 = G_TIME_MM
			GETTIME(0, date2)
			y2 = G_TIME_YY
			m2 = G_TIME_MM
			d = (y2 - y1) * 12 + m2 - m1
		CASE "d"
			d1 = GETTIME(0, date1)
			d2 = GETTIME(0, date2)
			d = (d2 - d1) / 86400
		CASE "w"
			d = INT(dateDiff("d", date1, date2) / 7)
		CASE "ww"
			date1 = dateAdd("d", -1 * getWeekday(date1), date1)
			d = INT(dateDiff("d", date1, date2) / 7)
		CASE "h"
			d = dateDiff("d", date1, date2) * 24
		CASE "n"
			d = dateDiff("d", date1, date2) * 1440
		CASE "s"
			d = dateDiff("d", date1, date2) * 86400
	SELEND
	RESULT = d
FEND
//////////////////////////////////////////////////
// 【引数】
//  date : (”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”) 
// 【戻り値】
//  曜日 (0:日曜…、6:土曜) 
//////////////////////////////////////////////////
FUNCTION getWeekday(date)
	GETTIME(0, date)
	RESULT = G_TIME_WW
FEND

ここからは、現在までに使ったことはないですが研究してみたい事例になります。

誰もが無料でWindows自動化を始め、生産性を向上し続けられるようにする

この記事が気に入ったらサポートをしてみませんか?