Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
freem
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Openai/695cbd46-d550-8011-b329-0231c60d7394
(section)
Add languages
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== gpt-5-mini == === User: chkimgxでクリック3.bmpの画像Aをクリックして、そのあとは記述どおりのキーボード操作で動かしたいのですが、画像Aが2つ認識されてしまって、うまくいきません === 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: なるほど、問題は 同一の画像が複数認識される場合に、上の画像だけを優先してクリックしたい ということですね。 === なるほど、問題は 同一の画像が複数認識される場合に、上の画像だけを優先してクリックしたい ということですね。 CHKIMGX の戻り値 G_IMGX_X, G_IMGX_Y は通常 最初にヒットした座標 を返しますが、場合によって下の画像が先に認識されることがあります。これを防ぐには 検索範囲を制限する、または 座標の小さい方(上側)を選択する 方法があります。 あなたのコードだと全画面の範囲 (x1,y1)-(x2,y2) で検索しているので、上下どちらもヒットしてしまいます。 ===== 方法1:検索範囲を上半分だけに限定する ===== 例えば上の画像Aだけを対象にしたい場合は、Y座標の下限を調整します: <syntaxhighlight lang="uws">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) </syntaxhighlight> これで 上半分だけ を対象にするので、必然的に上の画像が優先されます。 ===== 方法2:複数ヒットした場合に上側の座標を選択 ===== CHKIMGX は複数ヒットに対応できるオプションがあります。 * -1 は1つ目ヒット * 0 以上の値で複数ヒットを返すことができます <syntaxhighlight lang="uws">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]) </syntaxhighlight> これで Y座標が一番小さい(上にある)画像 を優先クリックできます。 💡 ポイント * 上半分に限定する → 簡単で確実 * 複数取得して上側を選ぶ → 画面構成が変わる場合でも柔軟 もし希望なら、このコードをあなたの全体スクリプトに組み込んだ完成版も作れます。 作ってほしいですか? === User: 方法1 完成版ください === 方法1 完成版ください === Assistant: 了解です。では、上半分だけを検索対象にして、上の画像Aを確実にクリックする 方法1の完成版 を示します。 === 了解です。では、上半分だけを検索対象にして、上の画像Aを確実にクリックする 方法1の完成版 を示します。 <syntaxhighlight lang="uws">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() </syntaxhighlight> ✅ ポイント: * y2 = y1 + ST_CLHEIGHT / 2 として 上半分だけを検索範囲 に指定 * これにより、下の画像Aは無視され、上の画像Aのみクリックされます * それ以外のキーボード操作は元のまま 希望であれば 検索範囲をもっと狭くして、微調整できるバージョン も作れます。 作ってほしいですか?
Summary:
Please note that all contributions to freem are considered to be released under the Creative Commons Attribution-ShareAlike 4.0 (see
Freem:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)