MMV

タグ:

マウスカーソルを移動します。

構文
MMV( x, y, [ms] )
引数
x, y
位置
ms
実行までの待ち時間 (ミリセカンド)
戻値

  1. 画像”image.bmp”が見つかったらその場所にカーソルを移動する。

    IF CHKIMG("image.bmp",,,,,, -1) THEN MMV(G_IMG_X, G_IMG_Y)
  2. 円を描く。

    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)
    	DIM pi = 3.14159265358979
    	RESULT = deg * pi / 180
    FEND
    
    
  3. 見つかった画像の位置をマウスカーソルで示す。

    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
    
    //////////////////////////////////////////////////
    // 【引数】
    //   dec : 10進数 
    // 【戻値】
    //   16進数に変換した値 
    //////////////////////////////////////////////////
    FUNCTION decToHex(dec)
    	RESULT = FORMAT(VAL(dec), 0, -1)
    FEND
    
    //////////////////////////////////////////////////
    // 【引数】
    //   deg : 度数法 
    // 【戻値】
    //   度数法から弧度法に変換した値 
    //////////////////////////////////////////////////
    FUNCTION degToRad(deg)
    	DIM pi = 3.14159265358979
    	RESULT = deg * pi / 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)
    	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
    
    

プログラム実行例

アクティブウィンドウの左上にカーソルを移動

DIM ID = GETID(GET_ACTIVE_WIN)

DIM x = STATUS(ID, ST_X)
DIM y = STATUS(ID, ST_Y)

MMV(x, y)
解説
  1. 1行目
    DIM ID = GETID(GET_ACTIVE_WIN)
    
    アクティブウィンドウのIDを取得。
  2. 3行目
    DIM x = STATUS(ID, ST_X)
    
    アクティブウィンドウのx座標を取得し、変数xに代入。
  3. 4行目
    DIM y = STATUS(ID, ST_Y)
    
    アクティブウィンドウのy座標を取得し、変数yに代入。
  4. 6行目
    MMV(x, y)
    
    マウスカーソルを(x, y) = (変数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)