UWSCをBlueStacksと組み合わせて自動操作をよくさせているのですが、その際によく使う自作関数を置いておきます
目次
- 1.ターゲットウィンドウの特定用
- 2.遷移に成功するまでクリック1
- 3.遷移に成功するまでクリック2
1.ターゲットウィンドウの特定用
マクロ起動時などに対象のウィンドウを特定し各種変数に格納の上アクティブにする
FUNCTION GET_TARGET_WIN() n = GETALLWIN() PRINT "ウィンドウの数:" + n FOR i = 0 TO (n - 1) IFB STATUS(ALL_WIN_ID[i], ST_TITLE) = "BlueStacks" WindowID = ALL_WIN_ID[i] ACW(WindowID) // chkimgx用各種設定 x1 = STATUS(WindowID, ST_X) y1 = STATUS(WindowID, ST_Y) x2 = STATUS(WindowID, ST_WIDTH) y2 = STATUS(WindowID, ST_HEIGHT) PRINT "WindowID: " + WindowID + "[" + STATUS(ALL_WIN_ID[i], ST_TITLE) + "]" PRINT "左上の位置 X: " + x1 + " Y: " + y1 PRINT "ウィンドウの幅: " + x2 + " 高さ: " + y2 RESULT = WindowID EXIT ENDIF NEXT FEND
2.遷移に成功するまでクリック1
クリックに失敗しても成功するまでリトライさせる
次画面で表示される画像をキーにするパターン
引数 img1 クリック対象画像 img2 この画像がひっかかればクリック成功 threshold1 img1の閾値 threshold2 img2の閾値 retry img1の画像を再検知してクリックするタイミング retryの数値 x 0.1秒経過後再度クリックを試みる ADDX img1をクリック時にX軸方向に指定ピクセル分ずらす ADDY img1をクリック時にY軸方向に指定ピクセル分ずらす
PROCEDURE FNC_Click(img1, img2, threshold1, threshold2, retry, ADDX=0, ADDY=0) IFB CHKIMGX(img1, WindowID, x1, y1, x2, y2, Detect_num, threshold1, Target_color) BTN(LEFT, CLICK, G_IMGX_X + ADDX, G_IMGX_Y + ADDY, 500) ENDIF c = 0 REPEAT SLEEP(0.1) c = c + 1 IFB c > retry c = 0 IFB CHKIMGX(img1, WindowID, x1, y1, x2, y2, Detect_num, threshold1, Target_color) BTN(LEFT, CLICK, G_IMGX_X + ADDX, G_IMGX_Y + ADDY) SLEEP(0.5) ENDIF ENDIF UNTIL CHKIMGX(img2, WindowID, x1, y1, x2, y2, Detect_num, threshold2, Target_color) FEND
3.遷移に成功するまでクリック2
クリックに失敗しても成功するまでリトライさせる
対象画像がなくなるまでクリックさせるパターン
引数 img クリック対象画像 threshold imgの閾値 retry img1の画像を再検知してクリックするタイミング retryの数値 x 0.1秒経過後再度クリックを試みる ADDX img1をクリック時にX軸方向に指定ピクセル分ずらす ADDY img1をクリック時にY軸方向に指定ピクセル分ずらす
PROCEDURE FNC_Click2(img, threshold, retry, ADDX=0, ADDY=0) IFB CHKIMGX(img, WindowID, x1, y1, x2, y2, Detect_num, threshold, Target_color) BTN(LEFT, CLICK, G_IMGX_X + ADDX, G_IMGX_Y + ADDY, 500) ENDIF c = 0 REPEAT SLEEP(0.1) c = c + 1 IFB c > retry c = 0 IFB CHKIMGX(img, WindowID, x1, y1, x2, y2, Detect_num, threshold, Target_color) BTN(LEFT, CLICK, G_IMGX_X + ADDX, G_IMGX_Y + ADDY) SLEEP(0.5) ENDIF ENDIF UNTIL !CHKIMGX(img, WindowID, x1, y1, x2, y2, Detect_num, threshold, Target_color) FEND