NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    에디터 1부 - 오토핫키 매크로에서 비활성 이미지 서치 후 찾은 이미지를 클릭하는 방법.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 매크로에 오토핫키 기능이 포함되면서 관련 내용들을 쭈우욱~ 작성하고 있습니다. 엔지엠 매크로는 GUI로 쉽게 매크로를 제작할 수 있도록 해줍니다. 오토핫키는 코딩 방식이라서 처음에 접하기엔 좀 어려울 수 있습니다. 하지만, 특정 기능을 구현할 때 엔지엠 매크로보다 오토핫키가 더 빠르고 쉽게 원하는 결과를 만들어 낼수도 있습니다. 물론, 반대의 경우도 있죠^^; 이 예제를 테스트하기 위해 엔지엠 에디터를 실행하고 새로운 스크립트를 하나 추가하세요.

    cnOuw3h.gif

     

     

    이 글을 작성하기 위해 미리 오토핫키로 이것 저것 테스트를 해보았습니다. 비활성 이미지 서치와 비활성 마우스 클릭, 비활성 키보드 입력등등... 윈도우 10에서는 정상적으로 동작하지만, 윈도우 11에서는 비활성 매크로가 일부 프로그램에서 정상 동작하지 않았습니다. 윈도우 11에서 Input Control(입력 창)들이 대거 변경되었고, 기본 Edit 컨트롤이 RichEdit 컨트롤로 변경되었습니다. 엔지엠 매크로는 윈도우 11에서도 100프로 대응이 되지만, 오토핫키로 비활성 매크로를 만든다면 업데이트된 새로운 버전이 나올때까지 기다려야 할거 같습니다.

     

    일단 윈도우 10에서 비활성으로 오토핫키 이미지 서치를 하려면 이 글에 첨부되어 있는 GdipImageSearch.zip 파일을 다운로드 받은 후 압축을 풀어야 합니다. 그러면, Gdip.ahkGdip_ImageSearch.ahk 파일 2개가 나옵니다. 코드가 좀 길긴하지만, 메모장 또는 텍스트 에디터로 열어보세요. [ 오토핫키 매크로 만들기 ] 강좌에서 소개한 Visual Studio Code를 사용해서 열어도 됩니다. 아래 그림과 같이 엄청난 코드가 들어 있습니다. 이 코드들을 다 이해할 필요는 없습니다. 적당히 수정해서 사용할 수 있는 정도면 될거 같아요!

    ltvjaP7.png

     

    K8Wkta0.png

     

     

    오토핫키는 비활성으로 이미지를 처리하기가 매우 어렵습니다. 이미지 서치는 원본 이미지와 대상 이미지 2개가 필요합니다. 여기서 원본 이미지는 대상 이미지를 찾을 이미지를 말합니다. 예를 들어서 윈도우 바탕화면에서 휴지통 아이콘을 찾는다고 하면, 원본 이미지(Source Image)는 윈도우 바탕화면이되고, 대상 이미지(Target Image)는 휴지통 아이콘이 됩니다. 다시 말해서 이미지 서치는 윈도우 바탕화면에서 휴지통 이미지를 찾는다는걸 의미합니다. 비활성 이미지 서치는 윈도우 캡쳐와는 다릅니다. 사용자가 선택한 창만 캡쳐가 되어야 하고 이 때 다른창에 가리거나 창이 이동되었더라도 해당 창만 캡쳐가 됩니다. 오토핫키에서 포인터로 처리하기 위해 Gdip을 사용합니다.

     

    엔지엠 에디터에서 [ 오토핫키 코드 실행 ] 액션을 스크립트에 추가합니다. 이 액션은 에디터의 우측 하단 외부 API 탭에 있습니다.

    lq0ziVS.png

     

     

    그림판을 실행하고, 연필 그림을 미리 캡쳐해서 저장 해둡니다. Pencil.png로 바탕화면에 저장 해주세요. 아래 코드는 그림판에서 연필을 찾는 전체 코드입니다.

    #Include Gdip_All.ahk
    #Include Gdip_ImageSearch.ahk
    
    pToken := Gdip_Startup()
    pHaystack := Gdip_BitmapFromHwnd(WinExist("제목 없음 - 그림판"))
    pNeedle := Gdip_CreateBitmapFromFile("/바탕화면/Pencil.png")
    result := Gdip_ImageSearch(pHaystack, pNeedle, outputVar)
    
    Gdip_DisposeImage(pHaystack)
    Gdip_DisposeImage(pNeedle)
    Gdip_Shutdown(pToken)
    
    if (result = 1)
    {
        RegExMatch(outputVar, "(.*),(.*)", out)
        MsgBox, X: %out1% Y: %out2%
    }

     

    스크립트를 실행하면, 그림판에서 연필 그림을 찾은 후 메세지 박스로 표시해주는걸 확인할 수 있습니다. 여기서, result 값이 1이면, MsgBox가 아닌 ControlClick 함수를 사용해서 마우스 클릭으로 변경해주면 됩니다. 오토핫키에서 MouseClick은 활성 모드로 마우스가 동작하고, ControlClick은 비활성 모드로 마우스가 동작합니다. 이외에도 PostMessageSendMessage가 있습니다. 하나씩 알아보기로 하고, 일단 엔지엠 매크로에서 비활성 이미지 서치와 클릭을 테스트 해볼께요. 아래 동영상처럼 비활성으로 이미지를 찾고, 마우스가 클릭할 창을 [ 핸들 추가 ] 액션으로 선택 해줍니다. 그리고, [ 이미지 서치 ] 또는 [ 이미지 매치 ] 액션으로 찾을 이미지를 캡쳐 따고 마우스 클릭 속성만 설정해주면 됩니다. 정말 간단하죠^^?

     

     

    엔지엠 매크로에서는 핸들을 추가해두면 그 이후부터는 모든 액션이 비활성으로 동작합니다. 만약, 비활성 상태에서 활성 상태로 변경해야 한다면 핸들을 삭제하기만 하면 됩니다. 쉽고 빠르게 하이브리드 매크로를 제작할 수 있습니다. 오토핫키도 비슷하지만, 비활성 동작은 제약이 많고 개발하기가 어렵습니다. 특히나 윈도우 11에서 제대로 동작하지 않는 부분들 때문에 시간을 많이 낭비했는데요. 이 글은 윈도우 10 기준이므로 여러분들은 걱정하지 않으셔도 됩니다^^; 2부에서는 오토핫키의 비활성 클릭인 ControlClick과 SendMessage, PostMessage 함수들에 대해서 알아보도록 하겠습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    첨부파일

    댓글목록

    등록된 댓글이 없습니다.