アプリ版:「スタンプのみでお礼する」機能のリリースについて

adbをUWSCからNoxに送り、タップすることには成功しているのですが、目当ての部分にタップを送ることが出来ません。

私のNoxの設定は通常起動時1280x720で起動しています。その時点でホーム画面にあるアプリの画像を保存してuwscのCHKIMGXでサーチをして座標を受け取りadbコマンドをNoxに送りそのアプリの起動は確認出来たのですが、そのアプリを起動するとウィンドウサイズが558x1020くらいになり同じようにクリックしたい画像を保存してから実行しても画像の認識は成功しているのですが、別の場所をタップしてしまいます。いろいろ試してみた結果xy座標にそれぞれ+150したら一つ目の画像はクリックに成功しました。ですが、次の画像は+150では成功しませんでした。(150から+-20とかでやればもしかしたら成功するかもしれませんが試していません。成功したとしても座標が100以上も離れているのがとても気になります)

私の考えではウィンドウサイズは558x1020と取得できるがadbで送る指示としてはだいぶ別のサイズなのかな?と思っているのですが原因、対処法等教えていただけませんか?

下記に使用しているUWSC文を書いておきます。(必要だと思う部分だけ抜粋しましたのでもしかしたら重要な部分が抜けてるかもしれません)


-------------A.uws-----------
call B.uws
getWindow("NoxPlayer")

while true
imageXClick2(pass+"test.bmp")
imageXClick2(pass+"close.bmp")
wend
--------------------------------------


--------------B.uws----------
public winid = ""
public winsizeX = -9999
public winsizeY = -9999
public windowflamesize = 32
public pass = "C:\aaaa\bbbb\ccc\" //適当に差し替えてます

//ウインドウ情報取得とウィンドウ指定
procedure getWindow(name)
winid = getid(name) //ゲームウィンドウを名前で検索して取得
print "ウィンドウIDを取得しました。"
print "ID.NOは" + winid
winPosX = STATUS(winid,ST_X)
winPosY = STATUS(winid,ST_Y)
winsizeX = STATUS(winid,ST_WIDTH)
winsizeY = STATUS(winid,ST_HEIGHT)
print "位置X 位置Y 幅 高さ"
print winPosX + " " + winPosY + " " + winsizeX + " " + winsizeY
mouseorg(winid,MORG_DIRECT,MORG_FORE)
fend

//指定画像が見つかるまで待機
procedure imageXSearch(image)
repeat
sleep(0.1)
until CHKIMGX(image,winid,0,0,winsizeX,winsizeY,1,3)
fend

//指定画像が画面上に出たら座標をクリック
procedure imageXClick2(image)
//指定ファイルが見つかるまで待機
imageXSearch(image)

cmd_x = G_IMGX_X +150
cmd_y = G_IMGX_Y +150

CMD = "cd /d D:\Program Files\Nox\bin & nox_adb shell input touchscreen tap " + (cmd_x) + " " + (cmd_y)

DOSCMD(CMD)
fend

----------------------------------------------------------------

質問者からの補足コメント

  • 違う場所をタップしてしまう最初はこのソースでした

    B.uwsのimageXClick2
    cmd_x = G_IMGX_X +150
    cmd_y = G_IMGX_Y +150



    cmd_x = G_IMGX_X
    cmd_y = G_IMGX_Y -windowflamesize

      補足日時:2019/09/03 00:09

A 回答 (2件)

ゴメン。


質問文の例が加算してたので、それに倣っちゃった。

> winPosXとwinPosYはウィンドウの位置の座標が入ると認識しているのですが、

その通りでウィンドウの左上隅の座標が入るハズなので、スクリーン座標からこれを引き算すると、クライアント領域の座標になるハズ。

cmd_x = G_IMGX_X - winPosX + 20
cmd_y = G_IMGX_Y - winPosY + 30 // 対象ウィンドウにメニューとか表示されるなら、その分ズラす。

--
図とか描いたり、計算した位置をPrintしてみるのが良いかも。

@IT > Insider.NET > .NET TIPS > スクリーン座標←→クライアント座標の変換を行うには?
https://www.atmarkit.co.jp/fdotnet/dotnettips/37 …
    • good
    • 0
この回答へのお礼

スクリーン座標とクライアント領域のずれはUWSCのmouseorg()で解消されていると思いますので、私の解釈が間違えていなければwinPosXとwinPosYは不要じゃないかなと思うのですが・・・
ウィンドウの位置を動かして実行を繰り返してみて+150したものですとしっかりとタップされるのでおそらくこの問題は大丈夫だと思います。

図を書いてprintで確かめる方法でどれくらいずれるのかを確かめたいと思います。普通は毎回同じ数値のずれであると思いますが、それであれば解決しますよね。

お礼日時:2019/09/08 03:48

CHKIMGXが取得するのは画面の左上を(0, 0)とするスクリーン座標


adbで送る座標は対象ウィンドウの表示領域の左上を(0,0)とするクライアント座標
なので、対象ウィンドウの左上位置が変わるとズレるとか?

cmd_x = G_IMGX_X +winPosX + 20 // 20は見つかった画像の左上端でなくて、しっかり画像をクリックするためのマージン
cmd_y = G_IMGX_Y +winPosY + 20
とかでは?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
動作を試したところうまく動作することが出来ませんでした。
winPosXとwinPosYはウィンドウの位置の座標が入ると認識しているのですが、相対座標での座標指定はうまくいってるようですので、ウィンドウの位置によって座標が大幅にずれてしまいます。

お礼日時:2019/09/07 18:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています