Jump to content

Openai/695cbd46-d550-8011-b329-0231c60d7394

From freem
Revision as of 05:30, 7 January 2026 by Lukegao (talk | contribs) (by freem.ai...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


This conversation was exported from ChatGPT[1]

gpt-5-mini[edit | edit source]

User: chkimgxでクリック3.bmpの画像Aをクリックして、そのあとは記述どおりのキーボード操作で動かしたいのですが、画像Aが2つ認識されてしまって、うまくいきません[edit | edit source]

chkimgxでクリック3.bmpの画像Aをクリックして、そのあとは記述どおりのキーボード操作で動かしたいのですが、画像Aが2つ認識されてしまって、うまくいきません このように同一画像Aが上下で並んでいて、上の画像Aのみをクリックしたいのですが、下の画像Aをクリックしてしまうことがあります。上の画像Aのみを優先的にクリックしたいのですがどのような記述にすればいいのでしょうか。

画像A

画像A


call chkimgx.uws startup_chkimgx()

id = GETID(GET_ACTIVE_WIN) x1 = STATUS(id, ST_X) y1 = STATUS(id, ST_Y) x2 = x1 + STATUS(id, ST_CLWIDTH) y2 = y1 + STATUS(id, ST_CLHEIGHT)

IFB CHKIMGX("クリック3.bmp",0,x1,y1,x2,y2,-1) Print "画像を検出、クリック実行" BTN(LEFT, CLICK, G_IMGX_X, G_IMGX_Y) SLEEP(0.01)

KBD(VK_RSHIFT, DOWN) SLEEP(1.000) KBD(VK_TAB) KBD(VK_TAB) KBD(VK_RSHIFT, UP) KBD(VK_ENTER)

KBD(VK_DOWN) SLEEP(0.01) KBD(VK_DOWN) SLEEP(0.01) KBD(VK_ENTER) SLEEP(0.01) KBD(VK_TAB) SLEEP(0.01) KBD(VK_ENTER)

Else Print "画像は見つかりませんでした。" Endif

shutdown_chkimgx()

Assistant: なるほど、問題は 同一の画像が複数認識される場合に、上の画像だけを優先してクリックしたい ということですね。[edit | edit source]

なるほど、問題は 同一の画像が複数認識される場合に、上の画像だけを優先してクリックしたい ということですね。 CHKIMGX の戻り値 G_IMGX_X, G_IMGX_Y は通常 最初にヒットした座標 を返しますが、場合によって下の画像が先に認識されることがあります。これを防ぐには 検索範囲を制限する、または 座標の小さい方(上側)を選択する 方法があります。

あなたのコードだと全画面の範囲 (x1,y1)-(x2,y2) で検索しているので、上下どちらもヒットしてしまいます。

方法1:検索範囲を上半分だけに限定する[edit | edit source]

例えば上の画像Aだけを対象にしたい場合は、Y座標の下限を調整します:

x1 = STATUS(id, ST_X)
y1 = STATUS(id, ST_Y)
x2 = x1 + STATUS(id, ST_CLWIDTH)
y2 = y1 + STATUS(id, ST_CLHEIGHT) / 2   ; ← 下半分は検索しない

IFB CHKIMGX("クリック3.bmp",0,x1,y1,x2,y2,-1)
    Print "画像を検出、クリック実行"
    BTN(LEFT, CLICK, G_IMGX_X, G_IMGX_Y)

これで 上半分だけ を対象にするので、必然的に上の画像が優先されます。

方法2:複数ヒットした場合に上側の座標を選択[edit | edit source]

CHKIMGX は複数ヒットに対応できるオプションがあります。

  • -1 は1つ目ヒット
  • 0 以上の値で複数ヒットを返すことができます
IFB CHKIMGX("クリック3.bmp",0,x1,y1,x2,y2,0)  ; 0 = 全て取得
    ; G_IMGX_X, G_IMGX_Y 配列にヒット座標が入る
    minY = 99999
    idx = -1
    For i = 0 To G_IMGX_CNT-1
        If G_IMGX_Y[i] < minY
            minY = G_IMGX_Y[i]
            idx = i
        Endif
    Next
    ; 上側の画像をクリック
    BTN(LEFT, CLICK, G_IMGX_X[idx], G_IMGX_Y[idx])

これで Y座標が一番小さい(上にある)画像 を優先クリックできます。

💡 ポイント

  • 上半分に限定する → 簡単で確実
  • 複数取得して上側を選ぶ → 画面構成が変わる場合でも柔軟

もし希望なら、このコードをあなたの全体スクリプトに組み込んだ完成版も作れます。 作ってほしいですか?

User: 方法1 完成版ください[edit | edit source]

方法1 完成版ください

Assistant: 了解です。では、上半分だけを検索対象にして、上の画像Aを確実にクリックする 方法1の完成版 を示します。[edit | edit source]

了解です。では、上半分だけを検索対象にして、上の画像Aを確実にクリックする 方法1の完成版 を示します。

call chkimgx.uws
startup_chkimgx()

id = GETID(GET_ACTIVE_WIN)
x1 = STATUS(id, ST_X)
y1 = STATUS(id, ST_Y)
x2 = x1 + STATUS(id, ST_CLWIDTH)
y2 = y1 + STATUS(id, ST_CLHEIGHT) / 2   ; ← 上半分だけ検索

IFB CHKIMGX("クリック3.bmp",0,x1,y1,x2,y2,-1)
    Print "画像を検出、クリック実行"
    BTN(LEFT, CLICK, G_IMGX_X, G_IMGX_Y)
    SLEEP(0.01)

    KBD(VK_RSHIFT, DOWN)
    SLEEP(1.0)
    KBD(VK_TAB)
    KBD(VK_TAB)
    KBD(VK_RSHIFT, UP)
    KBD(VK_ENTER)

    KBD(VK_DOWN)
    SLEEP(0.01)
    KBD(VK_DOWN)
    SLEEP(0.01)
    KBD(VK_ENTER)
    SLEEP(0.01)
    KBD(VK_TAB)
    SLEEP(0.01)
    KBD(VK_ENTER)

Else
    Print "画像は見つかりませんでした。"
Endif

shutdown_chkimgx()

✅ ポイント:

  • y2 = y1 + ST_CLHEIGHT / 2 として 上半分だけを検索範囲 に指定
  • これにより、下の画像Aは無視され、上の画像Aのみクリックされます
  • それ以外のキーボード操作は元のまま

希望であれば 検索範囲をもっと狭くして、微調整できるバージョン も作れます。 作ってほしいですか?

References[edit | edit source]

  1. "画像Aの優先クリック". ChatGPT. Retrieved 2026-01-07.