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

Помощь в написании скриптов
Fayrik

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

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
mcl
Posts: 357
Joined: 04 May 2018, 16:35

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

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, ...
    
github://oGDIp - GDI+ wrapper for AHK v1.1

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 44 guests