本ページには広告が含まれています。
目次
マウスカーソルを指定した座標に移動します。MMV関数でカーソルを移動させ続けてもWindowsのスリープ防止にはならないので注意してください。
- 構文
- void = MMV( x, y, ms )
- 引数
- x, y (Integer)必須
- 位置
- ms (Single = 0)省略可
- 実行までの待ち時間 (ミリセカンド)
- 戻り値
カーソル移動を滑らかにする
PROCEDURE mouseMove(x1, y1, x2, y2, sec = 1)
DEF_DLL GetTickCount(): dword: kernel32
DIM t = GetTickCount()
DIM dx = (x2 - x1) / 100
DIM dy = (y2 - y1) / 100
MMV(x1, y1)
FOR i = 0 TO 100
MMV(x1 + dx * i, y1 + dy * i)
REPEAT
UNTIL GetTickCount() - t >= i * (sec / 100) * 1000
NEXT
MMV(x2, y2)
FEND
使い方
-
画像image.bmpが見つかったらその場所にカーソルを移動する。
IF CHKIMG("image.bmp",,,,,, -1) THEN MMV(G_IMG_X, G_IMG_Y)
-
円を描く。
DIM a = G_SCREEN_W / 2 DIM b = G_SCREEN_H / 2 DIM r = 100 FOR theta = 0 TO 360 DIM x = a + r * COS(degToRad(theta)) DIM y = b + r * SIN(degToRad(theta)) MMV(x, y) SLEEP(0.001) NEXT ////////////////////////////////////////////////// // 【引数】 // deg : 角度(度数法) // 【戻り値】 // 度数法から弧度法に変換した値 ////////////////////////////////////////////////// FUNCTION degToRad(deg) RESULT = deg * (3.14159265358979 / 180) FEND
-
見つかった画像の位置をマウスカーソルで示す。
DIM path = "D:\Desktop\quick.bmp" DIM arr = getBitmap(path) DIM num = CHKIMG(path, -1,,,,, -1) FOR n = 0 TO num - 1 PRINT ALL_IMG_X[n] + ", " + ALL_IMG_Y[n] DIM a = ALL_IMG_X[n] + arr[1] / 2 DIM b = ALL_IMG_Y[n] + arr[2] / 2 DIM r = 5 FOR theta = 0 TO 360 STEP 10 DIM x = a + r * COS(degToRad(theta)) DIM y = b + r * SIN(degToRad(theta)) MMV(x, y) SLEEP(0.001) NEXT NEXT ////////////////////////////////////////////////// // 【引数】 // bin : 2進数 // signFlg : 符号付きならばTrue // 【戻り値】 // 10進数に変換した値 ////////////////////////////////////////////////// FUNCTION binToDec(bin, signFlg = TRUE) DIM dec = 0 DIM decimalFlg = IIF(POS(".", bin), TRUE, FALSE) IFB COPY(bin, 1, 1) = "1" AND signFlg THEN DIM msb = IIF(decimalFlg, POS(".", bin) - 1, LENGTH(bin)) DIM lsb = IIF(decimalFlg, POS(".", bin) - LENGTH(bin), 0) DIM dec2 = POWER(2, msb) - 1 FOR i = -1 TO lsb STEP -1 dec2 = dec2 + POWER(2, i) NEXT DIM a = binToDec(bin, FALSE) DIM b = dec2 dec = -1 * (bitXor(a, b) + POWER(2, lsb)) ELSE IFB decimalFlg THEN DIM integer = COPY(bin, 1, POS(".", bin) - 1) DIM decimal = COPY(bin, POS(".", bin) + 1) FOR i = 1 TO LENGTH(decimal) dec = dec + COPY(decimal, i, 1) * POWER(2, -1 * i) NEXT ELSE integer = bin ENDIF FOR i = 1 TO LENGTH(integer) dec = dec + COPY(integer, i, 1) * POWER(2, LENGTH(integer) - i) NEXT ENDIF RESULT = dec FEND ////////////////////////////////////////////////// // 【引数】 // arg1 : 数値1(10進数) // arg2 : 数値2(10進数) // 【戻り値】 // 2つの数値のビット毎の排他的論理和 ////////////////////////////////////////////////// FUNCTION bitXor(arg1, arg2) DIM args[1] = arg1, arg2 DIM bins[1] DIM decimals[1] DIM integers[1] DIM keta[1] IFB ABS(arg1) <> arg1 OR ABS(arg2) <> arg2 THEN RESULT = ERR_VALUE EXIT ENDIF FOR i = 0 TO 1 bins[i] = decToBin(args[i]) decimals[i] = 0 IFB POS(".", bins[i]) <> 0 THEN integers[i] = COPY(bins[i], 1, POS(".", bins[i]) - 1) decimals[i] = COPY(bins[i], POS(".", bins[i]) + 1) ELSE integers[i] = bins[i] ENDIF NEXT keta[0] = IIF(LENGTH(integers[0]) > LENGTH(integers[1]), LENGTH(integers[0]), LENGTH(integers[1])) integers[0] = strPad(integers[0], keta[0], "0", LEFT) integers[1] = strPad(integers[1], keta[0], "0", LEFT) keta[1] = IIF(LENGTH(decimals[0]) > LENGTH(decimals[1]), LENGTH(decimals[0]), LENGTH(decimals[1])) decimals[0] = strPad(decimals[0], keta[1], "0", RIGHT) decimals[1] = strPad(decimals[1], keta[1], "0", RIGHT) DIM bin = "" FOR i = 1 TO keta[0] bin = bin + (VAL(COPY(integers[0], i, 1)) XOR VAL(COPY(integers[1], i, 1))) NEXT bin = bin + "." FOR i = 1 TO keta[1] bin = bin + (VAL(COPY(decimals[0], i, 1)) XOR VAL(COPY(decimals[1], i, 1))) NEXT RESULT = binToDec(bin) FEND ////////////////////////////////////////////////// // 【引数】 // dec : 10進数 // signFlg : 符号付きならばTrueを指定 // digits : 変換した2進数の桁数合わせを自動で行うかを示すブール値、もしくは桁数を表す数値(8,16,24,32,64のいずれか)を指定 // recursive : 再帰処理の深さ。処理する際に必要なだけで指定する必要はありません。 // 【戻り値】 // 2進数に変換した値 ////////////////////////////////////////////////// FUNCTION decToBin(dec, signFlg = TRUE, digits = FALSE, recursive = 1) IFB dec < 0 AND signFlg = FALSE THEN RESULT = ERR_VALUE EXIT ENDIF IFB VARTYPE(digits) <> VAR_BOOLEAN AND digits < CEIL(LOGN(2, ABS(dec))) + IIF(dec < 0, 1, 0) THEN RESULT = ERR_VALUE EXIT ENDIF DIM bin = "" DIM decimalFlg = IIF(POS(".", dec) <> 0, TRUE, FALSE) DIM negativeFlg = IIF(dec < 0, TRUE, FALSE) dec = ABS(dec) DIM integer = IIF(decimalFlg, COPY(dec, 1, POS(".", dec) - 1), dec) DIM offset = POWER(10, LENGTH(dec) - POS(".", dec)) DIM decimal = IIF(decimalFlg, COPY(dec, POS(".", dec) + 1) / offset, 0) REPEAT bin = (integer MOD 2) + bin integer = INT(integer / 2) UNTIL integer = 0 IFB decimalFlg THEN bin = bin + "." DIM loop = 0 REPEAT loop = loop + 1 decimal = decimal * 2 bin = bin + IIF(decimal >= 1, "1", "0") IF decimal > 1 THEN decimal = decimal - 1 UNTIL decimal = 1 OR loop >= 64 WHILE loop MOD 4 <> 0 loop = loop + 1 bin = bin + "0" WEND ENDIF IFB VARTYPE(digits) = VAR_BOOLEAN THEN bin = strPad(bin, CEIL(LENGTH(REPLACE(bin, ".", "")) / 8) * 8, "0", LEFT) ELSE bin = strPad(bin, digits, "0", LEFT) ENDIF IFB negativeFlg THEN DIM msb = IIF(decimalFlg, POS(".", bin) - 1, LENGTH(bin)) DIM lsb = IIF(decimalFlg , POS(".", bin) - LENGTH(bin), 0) DIM a = binToDec(bin, FALSE) DIM b = POWER(2, msb) - 1 FOR i = -1 TO lsb STEP -1 b = b + POWER(2, i) NEXT dec = bitXor(a, b) + POWER(2, lsb) bin = decToBin(dec, signFlg, digits, recursive + 1) ENDIF IFB recursive = 1 THEN DIM bit = COPY(bin, 1, 1) DIM len = LENGTH(REPLACE(bin, ".", "")) IF negativeFlg AND (bit = "0" OR len MOD 2 <> 0) THEN bin = strRepeat("1", IIF(len MOD 2 <> 0, 4, 8)) + bin IF !negativeFlg AND signFlg AND (bit = "1" OR len MOD 8 <> 0) THEN bin = strRepeat("0", IIF(len MOD 8 <> 0, 4, 8)) + bin ENDIF RESULT = bin FEND ////////////////////////////////////////////////// // 【引数】 // dec : 10進数 // signFlg : 符号付きならばTrue // recursive : 再帰処理の深さ。処理する際に必要なだけで指定する必要はありません。 // 【戻り値】 // 16進数に変換した値 ////////////////////////////////////////////////// FUNCTION decToHex(dec, signFlg = TRUE, recursive = 1) DIM hex = "" DIM array[] = "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" DIM decimalFlg = IIF(POS(".", dec) <> 0, TRUE, FALSE) DIM negativeFlg = IIF(dec < 0, TRUE, FALSE) dec = ABS(dec) DIM integer = IIF(decimalFlg, COPY(dec, 1, POS(".", dec) - 1), dec) DIM offset = POWER(10, LENGTH(dec) - POS(".", dec)) DIM decimal = IIF(decimalFlg, COPY(dec, POS(".", dec) + 1) / offset, 0) REPEAT hex = array[integer MOD 16] + hex integer = INT(integer / 16) UNTIL integer = 0 IFB decimalFlg THEN hex = hex + "." DIM loop = 0 REPEAT loop = loop + 1 decimal = decimal * 16 hex = hex + array[decimal] offset = POWER(10, LENGTH(decimal) - POS(".", decimal)) decimal = (decimal * offset - INT(decimal) * offset) / offset UNTIL decimal = 0 OR loop >= 4 ENDIF DIM bin = hexToBin(hex) DIM keta = LENGTH(bin) IFB keta < 8 THEN bin = strPad(bin, decimalFlg + 8, "0", LEFT) ELSEIF keta < 16 THEN bin = strPad(bin, decimalFlg + 16, "0", LEFT) ELSEIF keta < 24 THEN bin = strPad(bin, decimalFlg + 24, "0", LEFT) ELSEIF keta < 32 THEN bin = strPad(bin, decimalFlg + 32, "0", LEFT) ELSE bin = strPad(bin, decimalFlg + 64, "0", LEFT) ENDIF IFB negativeFlg THEN DIM msb = IIF(decimalFlg, POS(".", bin) - 1, LENGTH(bin)) DIM lsb = IIF(decimalFlg, POS(".", bin) - LENGTH(bin), 0) DIM a = hexToDec(hex, FALSE) DIM b = POWER(2, msb) - 1 FOR i = -1 TO lsb STEP -1 b = b + POWER(2, i) NEXT dec = bitXor(a, b) + POWER(2, lsb) hex = decToHex(dec, signFlg, recursive + 1) ENDIF IFB recursive = 1 THEN DIM bit = COPY(hexToBin(COPY(hex, 1, 1)), 1, 1) DIM len = LENGTH(REPLACE(hex, ".", "")) IF negativeFlg AND (bit = "0" OR len MOD 2 <> 0) THEN hex = strRepeat("F", IIF(len MOD 2 <> 0, 1, 2)) + hex IF !negativeFlg AND signFlg AND (bit = "1" OR len MOD 2 <> 0) THEN hex = strRepeat("0", IIF(len MOD 2 <> 0, 1, 2)) + hex ENDIF RESULT = hex FEND ////////////////////////////////////////////////// // 【引数】 // deg : 角度(度数法) // 【戻り値】 // 度数法から弧度法に変換した値 ////////////////////////////////////////////////// FUNCTION degToRad(deg) RESULT = deg * (3.14159265358979 / 180) 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) CONST adTypeBinary = 1 DIM array[3] DIM Stream = CREATEOLEOBJ("ADODB.Stream") Stream.Open() Stream.Type = adTypeBinary Stream.LoadFromFile(path) DIM tmp = Stream.Read(30) Stream.Close() DIM fmt = "" FOR i = 0 TO 1 fmt = fmt + decToHex(tmp[i]) NEXT IFB fmt <> "424D" THEN RESULT = ERR_VALUE EXIT ENDIF DIM size = "" FOR i = 2 TO 5 hex = decToHex(tmp[i], FALSE) size = size + IIF(LENGTH(hex) = 1, "0", "") + hex NEXT array[0] = hexToDec(Endian(size)) DIM width = "" FOR i = 18 TO 21 hex = decToHex(tmp[i], FALSE) width = width + IIF(LENGTH(hex) = 1, "0", "") + hex NEXT array[1] = hexToDec(Endian(width)) DIM height = "" FOR i = 22 TO 25 hex = decToHex(tmp[i], FALSE) height = height + IIF(LENGTH(hex) = 1, "0", "") + hex NEXT array[2] = hexToDec(Endian(height)) DIM bit = "" FOR i = 28 TO 29 hex = decToHex(tmp[i], FALSE) bit = bit + IIF(LENGTH(hex) = 1, "0", "") + hex NEXT array[3] = hexToDec(Endian(bit)) RESULT = SLICE(array) FEND ////////////////////////////////////////////////// // 【引数】 // hex : 16進数 // 【戻り値】 // 2進数に変換した値 ////////////////////////////////////////////////// FUNCTION hexToBin(hex) HASHTBL hb hb["0"] = "0000"; hb["1"] = "0001"; hb["2"] = "0010"; hb["3"] = "0011"; hb["4"] = "0100"; hb["5"] = "0101"; hb["6"] = "0110"; hb["7"] = "0111"; hb["8"] = "1000"; hb["9"] = "1001"; hb["A"] = "1010"; hb["B"] = "1011"; hb["C"] = "1100"; hb["D"] = "1101"; hb["E"] = "1110"; hb["F"] = "1111"; DIM bin = "" IFB POS(".", hex) <> 0 THEN FOR i = 1 TO LENGTH(hex) DIM str = COPY(hex, i, 1) IF str = "." THEN bin = bin + "." bin = bin + hb[str] NEXT ELSE FOR i = 1 TO LENGTH(hex) bin = bin + hb[COPY(hex, i, 1)] NEXT ENDIF RESULT = bin FEND ////////////////////////////////////////////////// // 【引数】 // hex : 16進数 // signFlg : 符号付きならばTrue // 【戻り値】 // 10進数に変換した値 ////////////////////////////////////////////////// FUNCTION hexToDec(hex, signFlg = TRUE) hex = STRCONV(hex, SC_UPPERCASE) DIM dec = 0 DIM decimalFlg = IIF(POS(".", hex) <> 0, TRUE, FALSE) hex = IIF(LENGTH(REPLACE(hex,".", "" )) MOD 2 <> 0, "0", "") + hex DIM negativeFlg = IIF(COPY(hexToBin(hex), 1, 1) = "1", TRUE, FALSE) DIM sign = 1 IF negativeFlg AND signFlg THEN sign = -1 IFB negativeFlg AND signFlg THEN DIM bin = hexToBin(hex) DIM msb = IIF(decimalFlg, POS(".", bin) - 1, LENGTH(bin)) DIM lsb = IIF(decimalFlg, POS(".", bin) - LENGTH(bin), 0) DIM a = hexToDec(hex, FALSE) DIM b = POWER(2, msb) - 1 FOR i = -1 TO lsb STEP -1 b = b + POWER(2, i) NEXT DIM dec2 = bitXor(a, b) + POWER(2, lsb) hex = decToHex(dec2) ENDIF integer = IIF(decimalFlg, COPY(hex, 1, POS(".", hex) - 1), hex) decimal = IIF(decimalFlg, COPY(hex, POS(".", hex) + 1), "0") FOR i = 1 TO LENGTH(integer) s = COPY(hex, i, 1) num = IIF(CHKNUM(s), s, ASC(s) - (ASC("A") - 10)) dec = dec + num * POWER(16, LENGTH(integer) - i) NEXT FOR i = 1 TO LENGTH(decimal) s = COPY(decimal, i, 1) num = IIF(CHKNUM(s), s, ASC(s) - (ASC("A") - 10)) dec = dec + num * POWER(16, -1 * i) NEXT RESULT = sign * 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 ////////////////////////////////////////////////// // 【引数】 // num : 符号を求める数値 // 【戻り値】 // 1 : 正の数、0 : ゼロ、-1 : 負の数、ERR_VALUE : それ以外 ////////////////////////////////////////////////// FUNCTION sign(num) SELECT TRUE CASE !CHKNUM(num) RESULT = ERR_VALUE CASE num > 0 RESULT = 1 CASE num = 0 RESULT = 0 CASE num < 0 RESULT = -1 SELEND FEND ////////////////////////////////////////////////// // 【引数】 // input : 入力文字列 // length : 埋めたあとの長さ // str : 埋める文字 // type : 埋める方向 // 【戻り値】 // 指定文字で埋めた文字列 ////////////////////////////////////////////////// FUNCTION strPad(input, length, str = " ", type = RIGHT) DIM s = "" SELECT type CASE LEFT FOR i = 1 TO CEIL((length - LENGTH(input)) / LENGTH(str)) s = s + str NEXT input = COPY(s, 1, length - LENGTH(input)) + input CASE RIGHT FOR i = 1 TO CEIL((length - LENGTH(input)) / LENGTH(str)) s = s + str NEXT input = input + COPY(s, 1, length - LENGTH(input)) SELEND RESULT = input FEND ////////////////////////////////////////////////// // 【引数】 // inputs : 繰り返す文字列 // multiplier : inputsを繰り返す回数 // 【戻り値】 // inputsをmultiplier回を繰り返した文字列を返します ////////////////////////////////////////////////// FUNCTION strRepeat(inputs, multiplier) DIM res = "" FOR n = 1 TO multiplier res = res + inputs NEXT RESULT = res FEND
プログラム実行例
アクティブウィンドウの左上にカーソルを移動
DIM ID = GETID(GET_ACTIVE_WIN)
DIM x = STATUS(ID, ST_X)
DIM y = STATUS(ID, ST_Y)
MMV(x, y)
使用関数
解説
マウスカーソルをランダムな位置に移動
DIM x = G_SCREEN_W
DIM y = G_SCREEN_H
MMV(RANDOM(x), RANDOM(y))
使用関数
マウスカーソル下のウィンドウの左上の座標に移動する
MOUSEORG(GETID(GET_FROMPOINT_WIN))
MMV(0, 0)
使用関数
関連記事
- GETKEYSTATE関数 (スクリプト関数)
- GETKEYSTATE関数は、キークリック・マウスクリック・トグルキー情報を取得する関数です。引数に指定したキーコードに対応するキーのクリックがあった場合はTRUE、なかった場合はFALSEを返します。
- LOCKHARDEX関数 (スクリプト関数)
- MOUSEORG関数 (スクリプト関数)
- マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。
- MUSCUR関数 (スクリプト関数)
- MUSCUR関数は、マウスカーソルの種別を数値で返す関数です。引数はなく、戻値はInteger型です。