본문 바로가기
이미지맥스 그리고 루아(lua)/[응용] 내장함수 활용

[이미지맥스] 이미지를 서치하여 클릭하는 함수 clickImage()

by 위치결정 2021. 5. 4.
반응형

이미지맥스는 루아용 스크립트 내부함수를 내장하고있습니다. 내장함수는 공식카페(cafe.naver.com/imagemax/302) 에서 확인할수 있습니다.

 

내장 함수를 활용하여 다양한 동작을 꾸밀수 있습니다만, 사소하지만 보다 편리하게 쓸수 있는 방법을 또 생각해봤습니다.

저의 경우 비주얼스튜디오코드(VSC)를 이용해서 코드를 작성하는데, 이미지맥스의 내장함수들은 제가 작성중인 코드 워크스페이스에 정의된 함수블럭이 없다보니 인수를 뭘 넣어야 하는지 헬프창이 뜨지 않아 항상 내장함수를 찾아봐야 한다는 단점 아닌 단점이 발생하는 것입니다! 물론 자주 쓰는 함수들은 이미 외워버렸지만요.

 

더더욱이 아주 많이 쓰는 마우스클릭이나 이미지검색같은 함수들을 매번 인수를 다 넣자니 약간 귀차니즘이 발동하는것입니다.

그래서 함수들을 조합해서 좀더 편하게 제어해보고 싶어졌습니다.

 

4. 이미지 클릭 함수 clickImage()

네번째로 다뤄볼 함수는 이미지검색함수 ImageSearch() 를 통해 이미지를 찾고 클릭까지 하게 만들것 입니다.

아무래도 이미지검색 기반 자동화툴인 이미지맥스의 특성상 이 함수가 가장 쓰임새가 많고 주력으로 사용할만한 함수라고 예상되네요.

function clickImage(img_string)
    local boolean
    local ret, acc, ix, iy, sx, sy = ImageSearch(img_string)
    if ret == 1 then
        local rx = ix - sx
        local ry = iy - sy
        local rx = math.random(-rx, rx)
        local ry = math.random(-ry, ry)
        
        local ix = ix + rx
        local iy = iy + ry
    
        Mouse(LBUTTON, CLICK, ix, iy)
        boolean = true
        print('clickImage() : '..img_string)
    end
    return boolean
end

-- 인수 : 클릭할 이미지의 이름 문자열(img_string)
-- 반환 : 이미지서치 후 마우스 클릭 결과 (실패시:False, 성공시:True)

클릭을 할 이미지의 이름을 인수로 지정하여 실행하시면 이미지를 검색하고, 발견시 이미지의 영역만큼 클릭합니다.

이때 지난번에 만들어둔 이미지검색결과 클릭함수 clickResult() 를 활용하였습니다.

기억이 안나신다면 지난 글을 찾아서 봐주시면 좋을것 같습니다.

2021.05.02 - [이미지맥스, lua/이미지맥스 ImageMax] - [이미지맥스] 루아 내부함수를 응용해보자! -2- (clickResult()함수)

 

-- 예시1) 이미지를 검색하고 발견시 클릭
clickImage('find_image')


-- 내부함수로 코드를 작성시 예문
local ret, acc, ix, iy, sx, sy = ImageSearch('find_image')
if ret == 1 then
    local rx = ix - sx
    local ry = iy - sy
    Mouse(LBUTTON, CLICK, ix, iy, 0, 0, rx, ry)
end

기존 내부함수만으로 이미지를 검색하고, 각종 변수들을 계산해야 했던 이미지 클릭 동작이 이제 단 한줄로 가능합니다.

편리함으로 인해 루아로 이미지맥스를 활용하면서 가장 많이 활용하고 있는 함수가 아닐수가 없습니다.

 

특정 창에서만 있는 버튼등을 클릭할 경우 다음과 같은 예시도 가능합니다.

-- 예시2) 특정한 윈도우나 창에서 이미지를 검색하고 발견시 클릭
if isImage('confirm_window') then
    clickImage('confirm_ok_btn')
end


-- 내부함수로 코드를 작성시 예문
if ImageSearch('confirm_window') == 1 then
    local ret, acc, ix, iy, sx, sy = ImageSearch('confirm_ok_btn')
    if ret == 1 then
        local rx = ix - sx
        local ry = iy - sy
        Mouse(LBUTTON, CLICK, ix, iy, 0, 0, rx, ry)
    end
end

 

복잡한 동작일수도 있지만 아주 짧고 간결하게 처리가 가능합니다.

이미지검색함수 ImageSearch()를 boolean값으로 리턴을 받을수 있는 isImage() 함수도 이전에 다룬적이 있으니 해당글을 찾아봐주시면 좋을것 같습니다.

2021.03.29 - [이미지맥스, lua/이미지맥스 ImageMax] - [이미지맥스] ImageSearch()의 결과값을 boolean 값으로 받기

 

이제 머리가 안아플것 같습니다.

반응형

댓글