Autohotkey เพื่อค้นหาภาพ


0

ฉันเรียนรู้วิธีใช้ autohotkey และฉันต้องการสร้างสคริปต์ที่เปิดเกมจาก Steam และเชื่อมต่อกับเซิร์ฟเวอร์โดยอัตโนมัติ รหัสของฉันคือ:

F1::
Run, steam://rungameid/346110
Sleep, 15000 <--- This is more or less the time that my computer takes to load it, and I want another way to check if the game is already loaded
MouseClick, left, 156, 520 <--- (Position of "JOIN ARK")
Sleep, 1500 <--- This is the time that takes to load the button (JOIN LAST SESSION) also I want to check this with another more efficient way
MouseClick, left, 746, 940 <--- Click the button "JOIN LAST SESSION"
return

ดังนั้นด้วยรหัสนี้ฉันจึงรันเกมและเข้าร่วมเซสชันล่าสุด เมตาของฉันคือการวนซ้ำซึ่ง:

1- เปิดเกมหากยังไม่เปิด หากเปิดอยู่ให้รีสตาร์ท

2- ตรวจสอบเมื่อเมนูปรากฏขึ้นและคลิกปุ่ม "เข้าร่วม" ที่ x, y (156,520)

3- ตรวจสอบว่าปุ่ม "JOIN LAST SESSION" ปรากฏขึ้นเมื่อใดและคลิกที่มัน

4- หากป๊อปอัพปรากฏขึ้น (ฉันมีหน้าจอสำหรับข้อผิดพลาดทั้งหมด) ให้ไปที่ข้อ 1

ฉันคิดเกี่ยวกับ OCR แต่ไม่รู้ว่าจะนำไปใช้กับ autohotkey ได้อย่างไร

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

คำตอบ:


2

วิธีแก้ไขปัญหาของคุณคือใช้ฟังก์ชั่น 'ImageSearch'

หากคุณกดปุ่มหน้าจอพิมพ์ทุกครั้งที่ป๊อปอัปเกิดขึ้นคุณสามารถ CRTL + V วางลงในสี จากนั้นครอบตัดรูปภาพเพื่อให้คุณมีเพียงหน้าต่างป็อปอัพและบันทึกเป็นไฟล์. bmp จากนั้นคุณสามารถใช้ไฟล์บิตแมปนี้ในรหัส ImageSearch ของคุณ

ดูอย่างรวดเร็วที่รหัส ImageSearch ของใครบางคนที่สามารถพบได้ที่นี่

ดังนั้นหากสคริปต์ของคุณพบภาพที่กำลังมองหาคุณสามารถร่างรหัสเพิ่มเติมเพื่อให้ทำงานภายใต้ 'ErrorLevel = 0'

หากสคริปต์ของคุณไม่พบภาพคุณสามารถร่างรหัสอื่นให้ทำงานภายใต้ 'ErrorLevel = 1'

ขอแนะนำให้มาที่จุดนี้คุณเริ่มติดป้ายส่วนของรหัสและใช้ 'Gosub' เพื่อให้โค้ดของคุณสามารถข้ามระหว่างรูทีนเมื่อมันแตกต่างกันถ้า 'ตัวแปร' วิธีนี้คุณไม่จำเป็นต้องสร้างสคริปต์ตัวใหญ่ซ้ำตัวเองมากเกินไป

โปรดทราบว่า ImageSearch จะไม่ทำงานอย่างถูกต้องเมื่อสคริปต์ของคุณถูกถ่ายโอนจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งหากความละเอียดหน้าจอแตกต่างกันเล็กน้อย หากคุณพยายามเรียกใช้รหัสของคุณบนเครื่องที่มีความละเอียดหน้าจอที่แตกต่างกันคุณจะต้องจับภาพป๊อปอัปของคุณอีกครั้งเพื่อให้มันทำงานได้

ตัวอย่าง:

    ImageSearch, FoundX, FoundY, 40,40, 300, 300, C:\My Images\test.bmp

if ErrorLevel = 2
    MsgBox Could not conduct the search.
else if ErrorLevel = 1
    MsgBox Icon could not be found on the screen.
else
    MsgBox The icon was found at %FoundX%x%FoundY%.

ฉันได้แก้ไขคำถามของฉัน ^^ ผมชอบคำตอบ แต่ก็ยังไม่สามารถทำซ้ำมัน
J0ki

ฉันยังคงลองใช้ แต่ ImageSearch ดูเหมือนจะไม่ทำงาน @ Myles
J0ki

@ J0ki ฟังก์ชั่น ImageSearch น่าจะเหมาะกับคุณตราบเท่าที่รหัสของคุณถูกต้อง วิธีที่ดีที่สุดในการทดสอบว่าคุณทำถูกต้องคือการสร้างสคริปต์พื้นฐานที่ค้นหารูปภาพบนหน้าจอของคุณและหากพบหรือไม่ใช้ฟังก์ชัน 'msgbox' เพื่อส่งข้อความทั้ง ErrorLevel = 1 และ 0 ตัวแปร นอกจากนี้ชุมชน AHK จะสามารถช่วยคุณแก้ไขรหัสเพื่อให้ทำงานได้ พวกเขาเป็นพวงที่ดีและมักจะแจ้งให้คุณทราบว่าคุณกำลังทำอะไรผิดเมื่อคุณวางโค้ดเพื่อให้พวกเขาเห็น
Myles
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.