안녕하세요~ 킴영감 입니다~


오늘 EKMLib 첫번째 배포를 시작합니다.


그동안 FunLecture 홈페이지를 통해 사용하시던 분들은 인증방식이 바뀌었으니 확인하시기 바랍니다.


이전 글에서 설명드렸듯이 EKMLib비활성 매크로를 만들기 위해 필요한 기능들을 구현해놓은 라이브러리 입니다.



EKMLib에 미리 만들어져 있는 함수들을 사용방법에 맞게 사용하시면 됩니다.
(아직 함수를 모르시는분은 함수 강의를 보고 오시기 바랍니다.)


함수 강의 링크 - https://youtu.be/wCM0iPlDMNI


다운받으시기전에 본인 컴퓨터에 설치된 오토핫키가 몇비트인지 확인하시고 


확인 방법 링크- http://elderlykims.tistory.com/56


설치된 비트에 맞는 파일을 다운받으신 뒤 32비트의 경우 EKMLib.ahk, EKMLib.dll 파일64비트의 경우 EKMLib_x64.ahk, EKMLib_x64.dll 파일스크립트가 있는 폴더에 넣으시면 바로 사용하실 수 있습니다.


새로운 스크립트를 만드실 때 편하시도록 baseScript.ahk 파일을 만들어서 함께 넣어놓았으며 baseScript.ahk 작성되어 있는 내용이 반드시 적혀있어야 라이브러리를 사용할 수 있습니다.


추가적으로 실행중인 프로그램 리스트를 받아와서 ListView에 표시하는 예제 스크립트(ListView_example.ahk)와 


자식윈도우의 핸들을 검색하고 비활성클릭 입력이 가능한 창을 찾는 테스트 스크립트(ChildHWND_TestTool.ahk)도 함께 넣어놨습니다~


EKMLib의 자세한 사용방법블로그유튜브 채널을 통해 알려드리겠습니다.



1. EKMLib 다운로드


32비트 버전 - 


64비트 버전 - 


2.0.1 변경사항

ChildHWND_TestTool.ahk 내용이 잘못되어 있던 부분 수정


주의사항 : 배포는 http://elderlykims.tistory.com을 통해서만 이루어지며 무단 재배포 및 수정배포를 금지합니다. 저작물의 모든 권리는 킴영감에게 있습니다.


2. EKMLib사용시 유의사항


반드시 기초강좌의 내용을 완벽하게 이해하시기 바랍니다.


한 IP에서 2개 이상을 쓰신다면 EKMLib_Shotdown()은 실행하지 마시기 바랍니다.


또한, 사용하시기 전에 EKMLib 각 함수들의 사용방법도 완벽히 이해하셔야 사용가능합니다.

EKMLib 라이브러리를 사용하기 위해서는 설치된 오토핫키와 동일한 비트(bit)의 EKMLib를 사용하셔야 합니다.

32bit - EKMLib, 64bit - EKMLib_x64

비활성 이미지서치 함수를 사용하실 때 이미지를 24비트 bmp 파일로 만드셔야 합니다.

비활성 이미지 서치 기능을 사용하기 위해서는 바탕화면의 개인설정을 반드시 Aero 테마로 설정하셔야 합니다.

Nox의 경우 설정 → 고급설정 → 그래픽 모드 에서 스피드모드(DirectX)로 변경해주셔야 합니다.



3. 인증방법


EKMLib 인증을 위해 IDPASSWORD를 입력하셔야 하며 아래와 같습니다.


ID : guest

PASSWORD : goodluck


위 ID와 PASSWORD를 아래 그림에 표시된 baseScript의 ID와 PASSWORD를 입력하는 부분에 작성하시면 됩니다.



인증한 IP당 하나제한되어 있으며 중복 인증이 불가능합니다.

17.12.10. 변경

중복 로그인 가능하도록 변경되었습니다.


4. 함수 설명


EKMLib Ver.2.0.0에 구현되어있는 함수 및 기능은 아래와 같습니다.


파란색으로 표시된 부분이 함수 사용방법이며 사용되는 변수에 대한 설명을 적어 놓았습니다. 함수의 사용방법과 변수에 알맞은 값을 넣으시면 됩니다.


  • EKMLib_Start(user_id, user_pw) - EKMLib를 사용할 수 있도록 환경을 설정합니다.
    변수 설명
         user_id - EKMLib를 사용하기위한 사용자 ID 입니다.
         user_pw - EKMLib를 사용하기위한 사용자 PASSWORD 입니다.


  • error := EKMLib_findHWND(winTitle, _hWnd) - 윈도우의 핸들을 얻어오는 함수. 핸들은 비활성 함수들에 사용됩니다.
    변수 설명
         winTitle - 핸들을 얻어오려는 윈도우의 이름을 입력합니다.
        _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들.


  • error := EKMLib_findChildHWND(_hWnd, index) - 윈도우의 자식 윈도우의 핸들을 검색합니다.
    변수 설명
         error - 0 : 핸들 찾음, -1 : 핸들 못찾음
         _hWnd - EKMLib_findHWND를 통해 얻어온 핸들을 입력합니다.
         num - 자식 윈도우의 핸들 개수를 받아옵니다.


  • error := EKMLib_getChildHWND(_hWnd, index) - 검색된 윈도우 핸들 중 index(숫자) 번째에 해당하는 자식창의 핸들을 얻어옵니다.
    변수 설명
          error - 0 : 핸들 찾음, -1 : 핸들 못찾음
         _hWnd - 함수를 통해 얻어온 자식 윈도우의 핸들값이 저장됩니다.
         index - 검색된 자식윈도우의 핸들 중 몇번째 핸들을 받아올지에 대한 숫자를 입력합니다.


  • EKMLib_click(x, y, _hWnd) - 비활성 마우스 클릭 함수.
    변수 설명
         x - 클릭할 지점의 x 좌표
         y - 클릭할 지점의 y 좌표
         _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들


  • EKMLib_inactiveMouseDrag(s_x, s_y, e_x, e_y, num, _hWnd) - 비활성 마우스 드래그 함수
    변수 설명
         s_x - 드래그 시작 지점의 x 좌표
         s_y - 드래그 시작 지점의 y 좌표
         e_x - 드래그 끝 지점의 x좌표
         e_y - 드래그 끝 지점의 y좌표
         num - 드래그 횟수
         _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들


  • error := EKMLib_inactiveImageSearchAndClick(loc, image, x, y, _hWnd, acc, click_flag) - 비활성 이미지서치 및 클릭 함수. (최소화 상태에서는 동작하지 않습니다.)
    변수 설명
        error - 0: 이미지를 찾음, -1: 이미지를 못찾음
        loc - 이미지가 있는 폴더 명. 라이브러리 파일이 있는 경로의 아래경로
        image - 이미지 파일명 (확장자 제외)
        x - 찾을 이미지의 왼쪽 상단 x 좌표 (이미지 찾아드립니다 프로그램으로 확인가능합니다.)
        y - 찾을 이미지의 왼쪽 상단 y 좌표 (이미지 찾아드립니다 프로그램으로 확인가능합니다.)
        _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들
       acc - 이미지 인식 정확도. 1 ~ 0.5 사이의 값을 입력. 권장 값: 0.95
       click_flag - 이미지를 찾았을때 클릭을 할지/안할지 를 결정. 0: 클릭 안함, 1: 클릭 함


비활성 이미지서치 함수를 사용하실 때 이미지를 24비트 bmp 파일로 만드셔야 합니다.

  • error := EKMLib_inactiveImageSearchAndClickA(loc, image, x1, y1, x2, y2, _hWnd, acc, click_flag) - 범위 지정이 가능한 비활성 이미지서치 및 클릭 함수. (최소화 상태에서는 동작하지 않습니다.)
    변수 설명
       error - 0: 이미지를 찾음, -1: 이미지를 못찾음
       loc - 이미지가 있는 폴더 명. 라이브러리 파일이 있는 경로의 아래경로
       image - 이미지 파일명 (확장자 제외)
       x1 - 이미지를 찾을 영역의 왼쪽 상단 x 좌표
       y1 - 이미지를 찾을 영역의 왼쪽 상단 y 좌표
       x2 - 이미지를 찾을 영역의 오른쪽 하단 x 좌표
       y2 - 이미지를 찾을 영역의 오른쪽 하단 y 좌표
       _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들
       acc - 이미지 인식 정확도. 1 ~ 0.5 사이의 값을 입력. 권장 값: 0.95
       click_flag - 이미지를 찾았을때 클릭을 할지/안할지 를 결정. 0: 클릭 안함, 1: 클릭 함


  • error := EKMLib_inactiveImageSearch(loc, image, x1, y1, x2, y2, _hWnd, acc) - 비활성으로 찾은 이미지의 좌표를 반환하는 함수
    변수 설명
       error - 0: 이미지를 찾음, -1: 이미지를 못찾음
       loc - 이미지가 있는 폴더 명. 라이브러리 파일이 있는 경로의 아래경로
       image - 이미지 파일명 (확장자 제외)
       x1 - 찾은 이미지의 왼쪽 상단 x 좌표
       y1 - 찾은 이미지의 왼쪽 상단 y 좌표
       x2 - 찾은 이미지의 오른쪽 하단 x 좌표
       y2 - 찾은 이미지의 오른쪽 하단 y 좌표
       _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들
       acc - 이미지 인식 정확도. 1 ~ 0.5 사이의 값을 입력. 권장 값: 0.95

x1, y1, x2, y2를 오토핫키의 ImageSearch에서 FoundX, FoundY와 똑같은 방법으로 사용하시면 됩니다.


  • EKMLib_hideWindow(_hWnd) - 윈도우를 숨김/원위치 시키는 함수. 윈도우를 모니터 밖으로 이동시켜서 숨길 수 있습니다.
    변수 설명
       _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들

  • EKMLib_setWinList() - 실행중인 윈도우를 검색합니다. 검색 후, getWinList를 사용해서 윈도우 이름을 받아올 수 있습니다.


  • title := EKMLib_getWinList(index) - 실행중인 윈도우의 이름을 받아옵니다.
    해당 인덱스에 해당하는 하나의 값만 받아오며, Loop를 사용해서 모두 받아오시면 됩니다.
    변수 설명
        index - 검색된 윈도우 중 받아올 index값


  • EKMLib_Shutdown() - EKMLib 를 종료합니다. 종료하실 때 반드시 실행하셔야 합니다.

위에 나열된 함수들이 모두 EKMLib에 구현되어 있습니다.

간단한 사용법에 대한 강좌를 올리려고 했는데 이 글을 적는데 너무 오래 걸려서 쪼~금 미뤄야 겠네요.ㅠ

함수 강의를 보신 분들은 쉽게 접근하실 수 있으실 거구요~ 

감이 안오시는 분들은 위에 있는 함수 강의 링크 타고 가셔서 공부하시기 바랍니다~

감사합니다.


주의사항 : 배포는 http://elderlykims.tistory.com을 통해서만 이루어지며 무단 재배포 및 수정배포를 금지합니다. 저작물의 모든 권리는 킴영감에게 있습니다.


블로그 이미지

킴영감

프로그래밍과 게임공략, 게임과 관련된 프로그램에 대한 내용을 다룹니다.

댓글을 달아 주세요

  • ㅇㅇ 2017.12.09 16:47  댓글주소  수정/삭제  댓글쓰기

    잘 쓰던게 갑자기 안 되어서 깜짝놀랐네요. 이걸로 교체하니 다시 잘 됩니다~

  • ㅇㅇ 2017.12.09 22:12  댓글주소  수정/삭제  댓글쓰기

    간단한 매크로 작성한 스크립트중에 reload 커맨드가 있는데 요번에 바뀌면서 reload 하면 중복로그인으로 인식해서 다시 종료하고 켜야하네요 ㅠㅠ

    • 킴영감 2017.12.09 22:27 신고  댓글주소  수정/삭제

      음...reroad가 스크립트를 완전 종료하고 다시 시작하는거죠?? 우선 지금 상태에선 해결 방법이 없습니다. 스크립트 내용이 계속 바뀌는게 아니라면 reroad가 필요없을텐데 어떤매크로이신지...ㅠ reroad를 안하도록 구조를 변경하시는게 좋을 것 같네요ㅠㅠ저도 해결방법을 찾아보긴하겠습니다^^

    • 킴영감 2017.12.09 22:34 신고  댓글주소  수정/삭제

      아이피당 하나로 제한해놓은걸 풀게요~^^ 지금은 제가 밖이라 안되고 들어가는데로 업데이트해놓겠습니다~^^ 파일은 따로 바꾸실건 없으니 그대로 사용하시면 됩니다^^

  • 잉영 2017.12.09 23:50  댓글주소  수정/삭제  댓글쓰기

    갑자기 안돼서 깜짝놀랐네요; 원래 쓰던 거에서 인증키만 바꿨는데 작동을 안하는 ㅠ 바뀐 거 하나하나 공부해봐야겠네요 ㅎ

  • 잉영 2017.12.10 00:11  댓글주소  수정/삭제  댓글쓰기

    아 갑자기 또 되네요. 저도 한번씩 중복로그인 에러가 뜨고 한번은 이미지 찾을 수 없다면서 뜨다가 또 될 땐 되네요. 잘 쓰겠습니다 ^^

  • 유저 2017.12.10 00:55  댓글주소  수정/삭제  댓글쓰기

    친구랑 같이 살고 있습니다<공유기 이용>.. 둘다 EKMLib를 사용중인데 아이피 하나당으로 막아 놓으셔서 곤란해 하고 있습니다. ㅜㅜ

  • 2017.12.15 04:42  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 킴영감 2017.12.15 14:31 신고  댓글주소  수정/삭제

      드래그 스탭 값을 키워보시기 바랍니다

    • 킴영감 2017.12.15 15:15 신고  댓글주소  수정/삭제

      드래그는 안정성을 이유로 느릴수록 좋습니다. 최대한 도와드릴 수 있게 해보겠지는 하시는 게임을 직접 할 수 있을 정도로 여유가 있지 않네요...이해해주셨우면 좋겠습니다^^

    • 킴영감 2017.12.15 22:46 신고  댓글주소  수정/삭제

      우선 EKMLib에는 드래그 스탭이 없네요...ㅠ
      그런데 앞서 말씀드렸듯이 안정성 때문에 느려도 그대로 사용하시는게 좋습니다.^^

    • 킴영감 2017.12.16 03:47 신고  댓글주소  수정/삭제

      우선 강의를 다시 보셔야 겠네요...
      이미지서치함수 사용법을 틀리셨습니다.
      질문 하실 때 꼭 강의내용을 확실하게 익히시고 확인하신 뒤에 질문하셨으면 합니다.

      피파에서 확인해봤습니다.
      드래그를 할 때 내부적으로 3초의 Sleep이 들어가 있습니다. 위 스크립트의 경우 느린것 빼면 문제없이 동작해야 합니다.
      새로고침 뜨는건 기다리면 사라지지 않나요? 사라지는 시간을 고려해 드래그가 끝난 후 충분히 기다리셔야 합니다.
      녹스위치가 바뀌는건 이해가 안되네요...ㅠ
      좌표는 Relative로 하시는 것이 맞습니다.

      마지막으로 드래그 함수 개선해서 업데이트 예정이니 업데이트 받으셔서 다시한번 시도해보시기 바랍니다.^^

  • 2018.02.27 06:47  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 킴영감 2018.02.27 17:51 신고  댓글주소  수정/삭제

      ControlClick과 PostMessage의 정확도를 비교한다는건 맞는 개념이 아닙니다.^^
      쉽게 생각하면 두개가 같은 동작을 한다고 생각하시면 됩니다. 클릭이 가끔 씹히는 문제는 클릭을 당하는 프로그램의 반응속도 문제일 가능성이 제일 큽니다.^^

      앞으로 강의 계속 있습니다.ㅋ 단지 저에게 주어진 시간이 없을 뿐이죠...ㅠㅠ 열심해 추가강의 올리려고 노력하고 있어요^^

      winhttp는 저도 잘 모르는 부분이라 시간이 좀 걸릴 것 같네요ㅠ

  • 몽블랑 2018.03.23 05:40  댓글주소  수정/삭제  댓글쓰기

    한달을 헤메고 있내요ㅠㅠ 하나하나 하면 픽셀 잘 찾고 하는데 이상하게 순서되로

    클릭을 못하고 렌덤으로 클릭하내요 키매크로는 잘 되는데 어디가 잘못된건지 else if로

    해보고 싶은데 gui가 열리지도 않고 정말 답답하내요

    goto, 세트타이머 제가 할수 있는거는 다 해봤습니다.
    제 능력으로는 더 이상 어떻게 할수 없내요 바쁘실 텐데 한번만 살려주세요
    이걸 해야 킴영감님이 알려주신 비활성 픽셀서치를 도전할텐데 말이죠

    제가 원하는것은 오로지 픽셀서치 우선순위 되로 클릭 하는거에요 a,b,c,d동시에 나타나면 우선순위 클릭 한번클릭하고 나면 모든 픽셀이 사라지고 다시 나타나요 d,c가 동시에 나타나면 d클릭 이런식으로요 제발 방법좀 부탁드립니다








    f1::
    ax:
    global a := 820|840<<16
    global b := 976|809<<16
    global c := 989|772<<16
    global d := 980|699<<16

    CoordMode, mouse, screen
    CoordMode, pixel, screen

    loop
    {
    pixelsearch, outx, outy, 2091, 893, 2108, 921, 0x29a200, , fast RGB
    if(errorlevel = 0)
    {
    PostMessage, 0x200, 0, %a%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x201, 1, %a%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x202, 0, %a%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 100
    }

    else

    {
    pixelsearch, outx, outy, 2248, 872, 2260, 888, 0xfcd300, , fast RGB
    if(errorlevel = 0)

    {
    PostMessage, 0x200, 0, %b%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x201, 1, %b%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x202, 0, %b%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 300
    }
    else
    {
    pixelsearch, outx, outy, 2258, 835, 2271, 850, 0x212ac9, , fast RGB
    if(errorlevel = 0)
    {
    PostMessage, 0x200, 0, %c%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x201, 1, %c%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x202, 0, %c%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 300
    }

    else
    {
    pixelsearch, outx, outy, 2251, 763, 2257, 775, 0x7500e0, , fast RGB
    if(errorlevel = 0)
    {
    PostMessage, 0x200, 0, %d%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x201, 1, %d%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 1
    PostMessage, 0x202, 0, %d%, qt5qwindowicon7, 002 [실행 중] - Oracle VM VirtualBox
    sleep 600
    }
    }
    }
    }
    }

    return


    GuiClose:
    ExitApp
    return

    • 킴영감 2018.03.27 16:24 신고  댓글주소  수정/삭제

      스크립트는 잘 작성하신 것 같습니다.
      그런데 랜덤하게 클릭을 한다면 화면에 나타나는 픽셀의 값이 완전히 동일하게 나타나지 않을 수 있지 않을까 하는 생각이 드네요.ㅠ
      첫번째 우선순위의 픽셀이 나타나도 못찾고 else로 가버리면 랜덤이라고 생각할 수 있을 것 같습니다.
      우선 여러번 진행되는동안 픽셀의 값을 확인해보시고 조금씩 차리가 난다면 차이나는만큼 정확도 부분을 조절해보시면 될 것 같습니다.

      만약 차이가 없다면 다시한번 고민을 해봐야할 것 같네요.ㅠ

      테스트 해보시고 다시 댓글 달아주세요^^