マウス座標を相対座標で指定する方法

マウス座標を相対座標で指定するためにはMOUSEORG関数を利用します。

デフォルトでは指定したウィンドウの位置を基準に相対座標で指定できるのでレイアウトが固定されたウィンドウでマウス操作を自動化させたい場合に役立ちます。

しかし無理に相対座標を扱う必要もないので本当に必要か一度考えてみてください。

 

マウス座標を相対座標で指定するサンプル

id = EXEC("notepad.exe") // メモ帳を起動させる
MOUSEORG(id) // メモ帳を基準にする
MMV(0, 0) // 相対座標の0,0にマウスカーソルを移動

 

MOUSEORG関数リファレンス

MOUSEORG関数のリファレンスをマニュアルから転載します。

MOUSEORG( ID, [基準指定, 画面取得指定 ] )
引数
 ID: Windowを識別するID
 基準指定:
   0 (デフォルト): ウィンドウ位置
   MORG_CLIENT (1): クライアント領域の位置を基準にする
   MORG_DIRECT (2): 指定ウィンドウ(オブジェクト)へマウス、キー情報を直接送る(第1引数はウィンドウIDでもハンドル値でも可)
 画面取得指定: PEEKCOLOR()、CHKIMG()関数にて
   0 (デフォルト): 指定アプリがフォアグランドかバックグランドかにより検索画面の取得方法を変更
   MORG_FORE   : フォアグランドとして可視画面(デスクトップ)を検索画面とする
   MORG_BACK   : バックグランドとしてアプリより画面を取得して検索画面とする(他の画面がオーバーラップしていてもOK)

 ※ 以降のMMV()、BTN()、PEEKCOLOR()、CHKIMG()関数の座標を指定ウィンドウを基準にしたものにする
 ※ 基準指定にて MORG_DIRECTが指定された場合は KBD()、MMV()、BTN()関数の情報は直接ウィンドウ(オブジェクト)へ送る
 ※ スクリーン座標に戻す時はゼロを指定 MOUSEORG(0)
 ※ 有効範囲はスレッド単位

 

ドラッグ&ドロップの動作をさせる方法

UWSCではドラッグ&ドロップの動作をさせる命令は用意されていませんが、BTN関数とMMV関数を組み合わせることでドラッグ&ドロップの動作をさせることができます。

適切にウェイトを入れないと上手く動作しない可能性があるので注意しましょう。

 

ドラッグ&ドロップの動作をさせるサンプル

最初に1秒ウェイトを入れたので、その間にカーソル位置を変えてみてください。

SLEEP(1)
x = G_MOUSE_X
y = G_MOUSE_Y
BTN(LEFT, DOWN)   // マウスの左ボタンを押したままにする
SLEEP(0.1)
MMV(x + 100, y + 100) // マウスカーソルを移動させる
SLEEP(0.1)
BTN(LEFT, UP)   // マウスの左ボタンを離す

 

BTN関数リファレンス

BTN関数のリファレンスをマニュアルから転載します。

BTN( ボタン, 状態, [x, y, ms] )
引数
 ボタン:LEFT, RIGHT, MIDDLE, WHEEL(ホイール回転)
 状態:CLICK(0), DOWN(1), UP(2)  WHEEL指定時はノッチ数
 x, y: 位置 (省略時は現在位置にて) 
 ms: 実行までの待ち時間 (ミリセカンド)

 

MMV関数リファレンス

MMV関数のリファレンスをマニュアルから転載します。

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

 

マウスカーソルを移動させる方法

マウスカーソルを移動させる場合はMMV関数を利用します。

普通に人間が操作すればマウスカーソルも順次移動していきますが、自動で操作させる場合はいきなり目標地点に移動させることができます。

自動化させると早すぎて処理が追いつかない場合もあるので多少余裕を持たせて動作させましょう。

動作にウェイトを入れるにはSLEEP関数を利用するかMMV関数の引数で実行までの待ち時間を利用しましょう。

 

マウスカーソルを移動させるサンプル

マウスカーソルを画面の中央に移動させます。

x = G_SCREEN_W / 2 // 画面の幅の半分
y = G_SCREEN_H / 2 // 画面の高さの半分
MMV(x, y)

 

MMV関数リファレンス

MMV関数のリファレンスをマニュアルから転載します。

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

 

画像認識に成功したらマウスでクリックする方法

画像認識にはCHKIMG関数を利用します。CHKIMG関数で画像の検出に成功すると画像の座標を取得できるので、その座標をマウスでクリックさせます。

CHKIMG命令は透過処理や検出範囲の指定もできるので状況に応じてパラメータを指定してください。

注意したい点は画像認識に成功した場合、画像の左上の座標が変数G_IMG_X、G_IMG_Yに代入されることです。画像の中央ではないので意図した位置と違う位置をクリックしてしまう場合はこの原因かもしれません。

ちなみにBTN命令だけでも座標指定ができます。

 

画像認識に成功したらマウスでクリックするサンプル

IFB CHKIMG("sample.bmp") // 認識させたい画像ファイルを指定する
 // 画像認識に成功した場合の処理をここに書く
 MMV(G_IMG_X, G_IMG_Y)
 BTN(LEFT,CLICK)
ELSE
 // 画像認識に失敗した場合の処理をここに書く
 MSGBOX("画像認識に失敗しました。")
ENDIF

 

CHKIMG関数リファレンス

CHKIMG関数のリファレンスをマニュアルから転載します。

戻値 = CHKIMG( [画像名, 透過色/色無視, x1, y1, x2, y2, 番号, 色幅] )
引数
 画像名: 画像ファイル名(BMP形式のみ) (画像名を省略した場合はクリップボードから)
 透過色/色無視:
      0: 指定なし (デフォルト)
      1: 左上、2:右上、3:左下、4:右下 の1ピクセルの色を透過色として処理
     -1: 色を無視して形でチェックする
 x1, y1, x2, y2: サーチ範囲
 番号: 複数ある場合に順番を指定 (左上から)
     -1: -1が指定された場合はヒットした数を戻値として返し、座標情報は ALL_IMG_X[], ALL_IMG_Y[] に格納
        (G_IMG_X、 G_IMG_Y には最後にヒットした位置が入る)
 色幅: チェックに色幅を持たせる (色無視指定時もしくは 16bitカラー以下の場合は無効)
     IMG_MSK_BGR1  // 各色(BGR)に対し 2/256の色幅を許す
     IMG_MSK_BGR2  // 各色(BGR)に対し 4/256の色幅を許す
     IMG_MSK_BGR3  // 各色(BGR)に対し 8/256の色幅を許す
     IMG_MSK_BGR4  // 各色(BGR)に対し 16/256の色幅を許す
     IMG_MSK_B1, 2, 3, 4  // 青に対し 2/256, 4/256, 8/256, 16/256の色幅を許す
     IMG_MSK_G1, 2, 3, 4  // 緑に対し 2/256, 4/256, 8/256, 16/256の色幅を許す
     IMG_MSK_R1, 2, 3, 4  // 赤に対し 2/256, 4/256, 8/256, 16/256の色幅を許す
      ※ 演算可 例:IMG_MSK_B1 or IMG_MSK_R3(青に対し 2/256の色幅を許す + 赤に対し 8/256の色幅を許す)
戻値
 有ればTRUE、無ければFALSE
 TRUE の場合は見つかった座標を特殊変数 G_IMG_X、 G_IMG_Y に格納  
 番号にて -1指定時はヒットした数を返し、座標情報は配列変数 ALL_IMG_X[], ALL_IMG_Y[] に格納(配列はゼロから)