ImageSearch перестает находить изображение

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ImageSearch перестает находить изображение

Re: ImageSearch перестает находить изображение

Post by mcl » 17 Mar 2024, 17:26

По починке работы есть несколько мыслей:
  • Стоит уточнить, чему равен ErrorLevel, когда кнопка не находится: 1 – не нашлось, 2 — какая-то другая ошибка.
  • Возможно, когда мышь находится над кнопкой, изображение кнопки таки чуть меняется. В таком случае лучше искать два изображения – обычное и с наведённой мышью.
  • Возможно, к ImageSearch стоит добавить аргумент variation.
  • Возможно, WinGet стоит внести в тело первого Loop-цикла — возможно, искомые окна пересоздаются каждый раз с новыми id.
По улучшению скрипта:
  • Стоит предзагрузить все изображения вне цикла, и использовать HBITMAP:*%handle% вместо имени файла. Сейчас они на каждом витке перезагружаются с диска заново, что может мешать процессу.
  • Возможно, ImageSearch стоит оформить как функцию — это позволит использовать её сразу в условии if, и уменьшит объем копипасты.
  • Стоит ли искать остальные изображения, если crash.png не найден? Если нет, то лучше использовать конструкцию без лишних уровней вложенности

    Code: Select all

    If ErrorLevel
    	Continue
    
    ClickX := ...
    ClickY := ...
    MouseClick, ...
    

ImageSearch перестает находить изображение

Post by Fayrik » 16 Mar 2024, 17:31

Он находит кнопку краша пару раз асболютно нормально и стабильно, но после пары этих раз он просто перестает ее видеть, она остается 100% такой же. Ну и в целом может можно как то улучшить макрос.

Code: Select all

WinGet, windows, List, ahk_class Qt5156QWindowIcon

Loop {
    Loop, %windows%
    {
        this_id := windows%A_Index%
        
        WinActivate, ahk_id %this_id%
        WinWaitActive, ahk_id %this_id%, , 1

        Sleep, 2000

        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\Users\Acer\Desktop\autorelaunch\1fps\crash.png

        if !ErrorLevel {
            ImageWidth := 39
            ImageHeight := 10

            ClickX := FoundX + ImageWidth / 2
            ClickY := FoundY + ImageHeight / 2
            MouseClick, left, %ClickX%, %ClickY%
            Sleep, 2000 
            MouseClick, left, %ClickX%, %ClickY% 
        }

        ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\Users\Acer\Desktop\autorelaunch\1fps\rbx.png

        if !ErrorLevel {
            ClickX := FoundX + 10
            ClickY := FoundY + 10
            MouseClick, left, %ClickX%, %ClickY%
            
            Sleep, 15000
         }
   
         ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\Users\Acer\Desktop\autorelaunch\1fps\gpo.png

         if !ErrorLevel {
            ImageWidth := 55
            ImageHeight := 54

            ClickX := FoundX + ImageWidth / 2 
            ClickY := FoundY + ImageHeight / 2 
            MouseClick, left, %ClickX%, %ClickY%
                
            Sleep, 4000
            }

            ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\Users\Acer\Desktop\autorelaunch\1fps\play.png

            if !ErrorLevel {
                ImageWidth := 42
                ImageHeight := 14
                ClickX := FoundX + ImageWidth / 2
                ClickY := FoundY + ImageHeight / 2
                MouseClick, left, %ClickX%, %ClickY%

            Sleep, 4000
            }

            ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\Users\Acer\Desktop\autorelaunch\1fps\play2.png
 
            if !ErrorLevel {
                ImageWidth := 49
                ImageHeight := 11

                ClickX := FoundX + ImageWidth / 2
                ClickY := FoundY + ImageHeight / 2
                MouseClick, left, %ClickX%, %ClickY%
         }
        }
    }
    
    Sleep, 5000

Top