CHKIMGXを使って自動化スクリプトを作成していると、同じ画像が複数回認識されてしまうことがあります。この場合、特定の画像だけを優先的にクリックしたいという問題に直面することもあります。この記事では、画像が重複して認識される問題を解決するための方法を解説します。
CHKIMGXでの画像認識問題とは?
CHKIMGXは、画面上の画像を検索し、指定されたアクションを実行するツールですが、複数の同じ画像が画面上に存在する場合、どの画像をクリックすべきかの判断ができず、意図しない画像をクリックしてしまうことがあります。
特に、同じ画像が上下に並んでいるような場合に、この問題が発生しやすいです。上の画像を優先的にクリックしたい場合、画像の位置を指定して優先順位をつける方法を考える必要があります。
画像の位置を指定して優先順位を設定する方法
同じ画像が複数ある場合、位置を明示的に指定してクリックすることで、優先する画像を選択することができます。CHKIMGXのスクリプトに、画像の検出範囲(x1, y1, x2, y2)を設定して、上の画像だけをクリックするように指示する方法が有効です。
例えば、画像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()
このコードでは、画像Aが画面上で特定の範囲(x1, y1, x2, y2)内に存在する場合のみクリックを実行するように設定されています。これにより、上の画像Aを優先的にクリックすることができます。
画像の重複問題を解決するためのさらなる工夫
もし、同じ画像が非常に近くに存在していても、位置指定で問題を回避できない場合、画像の検出精度を上げるために、少しの工夫が必要です。
例えば、画像を検出する範囲を狭めて、正確に上の画像を検出する方法があります。また、スクリプト内で画像の検出後、クリック位置を指定して調整することで、クリックミスを減らすことができます。
まとめ
CHKIMGXで同じ画像が重複して認識される問題は、画像の位置を指定することで解決できます。画像Aが上下に並んでいる場合、位置指定を行うことで、上の画像のみをクリックするようにスクリプトを作成できます。画像の検出範囲やクリック位置を調整することで、意図した画像を正確にクリックすることが可能です。


コメント