Contents
マウスボタンを操作します。
左クリック、右クリック、ミドルボタン、スクロールホイールの操作ができます。
ノッチ数はプラスで奥方向、マイナスで手前方向にスクロールします。
- 構文
- void = BTN( ボタン, [状態, x, y, ms] )
- 引数
- ボタン
- LEFT, RIGHT, MIDDLE, WHEEL, TOUCH
- 状態
- CLICK(0︰デフォルト), DOWN(1), UP(2), WHEEL指定時はノッチ数
- x, y
- 位置
- ms
- 実行までの時間(単位︰ミリ秒)
- 戻り値
例
左クリック
BTN(LEFT, CLICK, x, y)
右クリック
BTN(RIGHT, CLICK, x, y)
ミドルボタン
BTN(MIDDLE, CLICK, x, y)
スクロールホイール
スクロールホイールを2ノッチ分手前にスクロールします。
BTN(WHEEL, -2, x, y)
タッチ
BTN(TOUCH, CLICK, x, y)
ダブルクリック
FOR i = 1 TO 2
BTN(LEFT, CLICK, x, y, 250)
NEXT
以下のプログラムでダブルクリックの速度(ミリ秒単位)が取得できるので、BTN関数の第四引数の値はこの値より小さい値を指定してください。
DIM Shell = CREATEOLEOBJ(“Shell.Application”)
PRINT Shell.GetSystemInformation(“DoubleClickTime”)
ドラッグ・アンド・ドロップ
(x, y) = (50, 350)でマウスの左ボタンを押したまま(50, 250)に移動し、そこで左ボタンを離します。
よく使う場合は関数化すると便利。
BTN(LEFT, CLICK, 50, 350)
MMV(50, 250)
BTN(LEFT, CLICK, 50, 250, 500)
プログラム実行例
指定した画像の中央を左クリック
DIM path = "image.bmp"
DIM arr = getBitmap(path)
CHKIMG(path)
BTN(LEFT, CLICK, G_IMG_X + arr[1] / 2, G_IMG_Y + arr[2] / 2)
//////////////////////////////////////////////////
// 【引数】
// dec : 10進数
// 【戻値】
// 16進数に変換した値
//////////////////////////////////////////////////
FUNCTION decToHex(dec)
RESULT = FORMAT(VAL(dec), 0, -1)
FEND
//////////////////////////////////////////////////
// 【引数】
// str
// 【戻値】
//
//////////////////////////////////////////////////
FUNCTION Endian(str)
DIM len = LENGTH(str)
IFB !isEven(len) THEN
str = "0" + str
len = len + 1
ENDIF
DIM res = ""
FOR n = 1 TO len STEP 2
res = COPY(str, n, 2) + res
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// path : ビットマップ画像のパス
// 【戻値】
// 配列。0:サイズ(Byte)、1:幅(px)、2:高さ(px)、3:ビットの深さ(bit)
//////////////////////////////////////////////////
FUNCTION getBitmap(path)
DIM arr[3] // 戻り値
DIM Stream = CREATEOLEOBJ("ADODB.Stream")
Stream.Open()
Stream.Type = 1 // adTypeBinary
Stream.LoadFromFile(path)
DIM tmp = Stream.Read(30)
Stream.Close()
// BM(0~1)
DIM fmt = ""
FOR n = 0 TO 1
fmt = fmt + decToHex(tmp[n])
NEXT
IFB fmt "424D" THEN
RESULT = ERR_VALUE
EXIT
ENDIF
// サイズ(2~5)
DIM size = ""
FOR n = 2 TO 5
size = size + REPLACE(FORMAT(VAL(decToHex(tmp[n])), 2), " ", "0")
NEXT
arr[0] = hexToDec(Endian(size))
// 幅(18~21)
DIM width = ""
FOR n = 18 TO 21
width = width + REPLACE(FORMAT(VAL(decToHex(tmp[n])), 2), " ", "0")
NEXT
arr[1] = hexToDec(Endian(width))
// 高さ(22~25)
DIM height = ""
FOR n = 22 TO 25
height = height + REPLACE(FORMAT(VAL(decToHex(tmp[n])), 2), " ", "0")
NEXT
arr[2] = hexToDec(Endian(height))
// ビットの深さ(28~29)
DIM bit = ""
FOR n = 28 TO 29
bit = bit + REPLACE(FORMAT(VAL(decToHex(tmp[n])), 2), " ", "0")
NEXT
arr[3] = hexToDec(Endian(bit))
RESULT = SLICE(arr)
FEND
//////////////////////////////////////////////////
// 【引数】
// hex : 16進数
// 【戻値】
// 10進数に変換した値
//////////////////////////////////////////////////
FUNCTION hexToDec(hex)
dec = 0
hex = STRCONV(hex, SC_LOWERCASE)
FOR n = 1 TO LENGTH(hex)
str = COPY(hex, n, 1)
IFB CHKNUM(str) THEN
num = str
ELSE
num = ASC(str) - 87
ENDIF
dec = dec + (num * POWER(16, LENGTH(hex) - n))
NEXT
RESULT = dec
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
//////////////////////////////////////////////////
// 【引数】
// 数値 : 整数
// 【戻値】
// True : 偶数、False : 偶数以外の数値、ERR_VALUE : 数値以外
//////////////////////////////////////////////////
FUNCTION isEven(n)
IFB VAL(n) = n THEN
RESULT = IIF(INT(n) MOD 2 = 0, TRUE, FALSE)
ELSE
RESULT = ERR_VALUE
ENDIF
FEND
解説
- 2行目
- getBitmap関数で画像「image.bmp」の情報を取得しarr配列に格納。
DIM arr = getBitmap(path)
- 3行目
- 「image.bmp」を探して見つかったら座標を取得。
CHKIMG(path)
- 5行目
- 画像の中央を左クリック。
BTN(LEFT, CLICK, G_IMG_X + arr[1] / 2, G_IMG_Y + arr[2] / 2)