BTN

構文
BTN( ボタン, [状態, x, y, ms] )
引数
ボタン
LEFT, RIGHT, MIDDLE, WHEEL, TOUCH
状態
CLICK(0︰デフォルト), DOWN(1), UP(2), WHEEL指定時はノッチ数
x, y
位置
ms
実行までの時間(単位︰ミリ秒)
戻値

プログラム実行例

指定した画像の中央を左クリック

G_IMG_X・G_IMG_Yはマッチした画像の左上の座標なので、画像の幅・高さの1/2の値を足すことで中央の座標にしています。

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 : 奇数 ////////////////////////////////////////////////// FUNCTION isEven(n) IFB n <> VARTYPE(n, VAR_INTEGER) THEN RESULT = ERR_VALUE EXIT ENDIF RESULT = IIF(n MOD 2 = 0, TRUE, FALSE) FEND
解説
  1. 2行目
    DIM arr = getBitmap(path)
    getBitmap関数で画像「image.bmp」の情報を取得しarr配列に格納。
  2. 3行目
    CHKIMG(path)
    「image.bmp」を探して見つかったら座標を取得。
  3. 5行目
    BTN(LEFT, CLICK, G_IMG_X + arr[1] / 2, G_IMG_Y + arr[2] / 2)
    BTN関数の第一引数がLEFT、第二引数がCLICKなので左クリックになります。IMG_Xが画像の左上の座標、arr[1]に画像の幅が格納されているので、「IMG_X + arr[1] / 2」で画像左上の座標から幅半分を加えた位置になります。「IMG_Y + arr[2] / 2」も同様に画像左上の座標から高さ半分を加えた位置になります。