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


유료 서버 오픈으로 기존 라이브러리 파일 배포를 중단합니다.


기능은 기존 배포버전과 동일하며 인증 서버만 변경되었습니다.


자세한 사항은 elderlykim.com 에서 확인하시기 바랍니다.


한동안은 기존 서버도 함께 유지되며 기존에 사용하시던 분들은 서버 폐쇠전까지 기존 라이브러리 파일을 사용하실 수 있습니다.


EKMLib 2018년 05월 25일 업데이트 버전 배포합니다.


다양한 기능들이 추가되었으니 이전 버전을 사용하고 계시는 분들은 꼭 업데이트 하시기 바랍니다~


★업데이트 방법★


2.2.0버전부터 다운받으신 폴더에 있는 adb.exe파일과 AdbWinApi.dll 파일을 추가로 같은 폴더에 넣으셔야 adb기능을 사용하실 수 있습니다.


본인이 사용하는 윈도우 버전 및 설치된 오토핫키의 비트를 확인한 뒤 본인의 시스템에 맞는 압축파일을 다운받으신 뒤 EKMLib.ahk, EKMLib.dll파일을 기존의 파일과 바꿔주시면 됩니다.


2.1.3버전부터 파일이름이 EKMLib 하나로 통일되었으니 착오없으시기 바랍니다. 

(기존에 64비트버전 사용하시던 분들은 #include EKMLib_x64.ahk를 #include EKMLib.ahk로 변경하셔야 합니다.)


기본 사용방법 강의https://youtu.be/qskrz1euJsY



그동안 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 Ver.2.2.2 다운로드 (구버전 배포 중단합니다.)


Windows 7 버전


32비트 버전 - 



64비트 버전 - 





Windows 10 버전


32비트 버전 - 



64비트 버전 - 




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


2. EKMLib사용시 유의사항


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


운영체제 버전별로 사용가능프로그램과 조건이 다르기 때문에 확인 후 사용하시기 바랍니다. 

사용가능 프로그램 링크 - http://elderlykims.tistory.com/58


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


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

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

32bit - EKMLib, 64bit - EKMLib_x64

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

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



3. 인증방법


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


ID : guest

PASSWORD : goodluck


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



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

17.12.10. 변경

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



2.2.2 버전업데이트 내용 (2018.05.25.)


EKMLib_sellectSearchMethod 함수의 이름이 EKMLib_selectSearchMethod 로 변경 되었습니다.



2.2.1 버전업데이트 내용 (2018.05.25.)


2.2.0 버전에서 Window7 버전의 이미지서치 방법이 변경되었으며 업데이트 후 비활성 이미지서치가 동작하지 않는다는 제보가 있어 구버전에 사용되는 방법을 선택할 수 있게 업데이트 되었습니다.

아래의 함수 설명에서 확인하시기 바라며 기본 설정은 신버전입니다.



2.2.0 버전업데이트 내용 (2018.05.23.)


1) 비활성 이미지서치함수 추가

2) adb 기능 추가

3) 이미지파일을 활용한 비활성 이미지서치 함수 추가 (adb와 함께 사용하시면 최소화 상태에서도 동작 시킬 수 있습니다.)

4) 오류 시 뜨는 메세지박스를 On/Off 할 수 있는 함수 추가



2.1.4 버전업데이트 내용 (2017.12.30.)


인터넷 연결이 끊겼을 때 바로 팅기는 현상 완화



2.1.3 버전업데이트 내용 (2017.12.19.)


윈도우 10버전 추가 (기존 버전이 윈도우 7 에서만 동작해 윈도우 10버전을 추가 배포합니다.)

전체화면일 때 최소화 상태로 인식하는 문제 수정



2.1.2 버전업데이트 내용 (2017.12.17.)


픽셀서치 오류 수정



2.1.1 버전에 추가된 기능


라이브러리를 로딩할 때 최신버전을 확인하는 기능을 추가했습니다.



4. 함수 설명


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


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



2.2.1 버전에 추가된 함수


  • EKMLib_selectSearchMethod(method) - 이미지서치 방법을 선택합니다.
    변수 설명
       error - 0 : 셋팅 성공, -1 : 셋팅 실패
       method - 0 : 신버전, 1 : 구버전 (기본값은 0 입니다.)


2.2.0 버전에 추가된 함수


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


  • EKMLib_imageSearchFromFile(loc, image, image_large, outx, outy, x1, y1, x2, y2, acc) - 이미지파일에서 이미지서치를 수행하는 함수. adb 캡쳐함수와 함께 활용.
    변수 설명
       error - 0: 이미지를 찾음, -1: 이미지를 못찾음
       loc - 이미지가 있는 폴더 명. 라이브러리 파일이 있는 경로의 아래경로
       image - 이미지 파일명 (확장자 제외)
       image_large - 이미지서치를 수행할 대상 이미지 (확장자 제외, bmp 파일만 가능)
       outx - 찾은 이미지의 왼쪽 상단 x좌표
       outy - 찾은 이미지의 왼쪽 상단 y좌표
       x1 - 찾을 영역의 왼쪽 상단 x 좌표
       y1 - 찾을 영역의 왼쪽 상단 y 좌표
       x2 - 찾을 영역의 오른쪽 하단 x 좌표
       y2 - 찾을 의 오른쪽 하단 y 좌표
       acc - 이미지 인식 정확도. 1 ~ 0.5 사이의 값을 입력. 권장 값: 0.95


  • EKMLib_adbCapture(adbName, fileName) - adb 명령을 사용해 특정 앱플레이어의 현재 화면을 캡쳐하는 함수.
    변수 설명
         adbName - 앱플레이어 이름(주소).
         fileName - 캡쳐한 이미지를 저장할 파일 이름. (확장자 제외)


앱플레이어의 주소는 자작프로그램에서 배포중인 adb Manager를 통해 확인가능합니다.

링크 - http://elderlykims.tistory.com/75



  • EKMLib_adbClick(adbName, x, y) - adb 명령을 사용해 특정 앱플레이어의 특정 좌표를 클릭하는 함수.
    변수 설명
         adbName - 앱플레이어 이름(주소).
         x - 클릭할 좌표의 x좌표
         y 클릭할 좌표의 x좌표


  • EKMLib_setMessageFlag(msg_flag) - 오류 발생 시 띄우는 메세지박스를 허용(또는 비허용) 하는 함수.
    변수 설명
         msg_flag - true : 허용, false : 비허용


2.1.0 버전에 추가된 함수


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


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


  • EKMLib_keyInput(wParam, lParam, _hWnd) - 비활성 키보드 입력 함수.
    변수 설명
         wParam - 입력할 키의 wParam
         lParam - 입력할 키의 lParam
         _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들


입력할 키의 wParamlParam은 자작프로그램에 있는 Parameter Spy로 확인 가능합니다.

링크 - http://elderlykims.tistory.com/60



  • EKMLib_keyDown(wParam, lParam, _hWnd) - 비활성 키보드 다운 함수.
    변수 설명
         wParam - 입력할 키의 wParam
         lParam - 입력할 키의 lParam
         _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들


  • EKMLib_keyUp(wParam, lParam, _hWnd) - 비활성 키보드 업 함수.
    변수 설명
         wParam - 입력할 키의 wParam
         lParam - 입력할 키의 lParam
         _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들


  • EKMLib_sendText(myStr, _hWnd) - 비활성 문자열 입력 함수 (텍스트 입력)
    변수 설명
         myStr - 입력할 문자열 (예. "안녕하세요~")
         _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들

    채팅, 검색 등을 위해 문자열을 입력할 때 사용할 수 있으며, 반드시 텍스트 입력창에 커서가 깜빡이는 상태에서 사용하셔야 합니다.


  • error := EKMLib_inactivePixelSearch(OutX, OutY, x1, y1, x2, y2, RGB_value, _hWnd, acc) - 비활성 픽셀서치 함수. (최소화 상태에서는 동작하지 않습니다.)
    변수 설명
        error - 0: 픽셀을 찾음, -1: 픽셀을 못찾음
        OutX - 찾은 픽셀의 x좌표를 저장하는 변수
        OutY - 찾은 픽셀의 y좌표를 저장하는 변수
        x1 - 픽셀을 찾을 영역의 왼쪽 상단 x좌표
        y1 - 픽셀을 찾을 영역의 왼쪽 상단 y좌표
        x2 - 픽셀을 찾을 영역의 오른쪽 하단 x좌표
        y2 - 픽셀을 찾을 영역의 오른쪽 하단 y좌표
        RGB_value - 찾을 픽셀의 RGB 값
        _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들
       acc - 픽셀 값 정확도. 0 ~ 50 사이의 값을 입력. 권장 값: 0   

픽셀 값은 자작프로그램에 있는 픽셀값 찾기 프로그램으로 확인가능합니다.


2.0.0 버전의 수정된 함수

  • EKMLib_inactiveMouseDrag(s_x, s_y, e_x, e_y, step, num, _hWnd) - 비활성 마우스 드래그 함수
    변수 설명
         s_x - 드래그 시작 지점의 x 좌표
         s_y - 드래그 시작 지점의 y 좌표
         e_x - 드래그 끝 지점의 x좌표
         e_y - 드래그 끝 지점의 y좌표
         step - 드래그 시 마우스가 움직이는 간격 (1 이상의 값을 입력하셔야 합니다.)
         num - 드래그 횟수
         _hWnd - EKMLib_findHWND로 얻어온 윈도우 핸들

Step 변수가 추가되었으며, 함수의 오류 수정 및 드래그 성능이 개선되었습니다.


기존 함수

  • 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로 얻어온 윈도우 핸들

  • 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을 통해서만 이루어지며 무단 재배포 및 수정배포를 금지합니다. 저작물의 모든 권리는 킴영감에게 있습니다.
상업적 이용은 elderlykim@naver.com 으로 문의주시기 바랍니다.


블로그 이미지

킴영감

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

댓글을 달아 주세요

  • 이전 댓글 더보기
  • 변상훈 2018.08.20 21:41  댓글주소  수정/삭제  댓글쓰기

    비활성이미지 잘 배우고 있습니다.
    그 중 이미지서치에서 궁금한게 생겨 글 남기게 됐는데요,
    이미지서치 클릭은 가능한데 이미지 서치를 한 곳의 x축으로 20의 클릭을 하는방법도 있나요?

  • 킴영광님 덕분에 다시 희망을 품고 오핫을 만지게 되었습.. 2018.08.24 10:06  댓글주소  수정/삭제  댓글쓰기

    킴영광님 덕분에 다시 희망을 품고 오핫을 만지게 되었습니다
    처음에 마우스클릭이 되는 순간 정말 기분이 좋았습니다 감사드립니다

    #include EKMLib.ahk ; EKMLib 라이브러리 추가
    user_id := "guest" ; 따옴표 사이에 ID를 입력합니다.
    user_pw := "goodluck" ; 따옴표 사이에 PASSWORD를 입력합니다.
    EKMLib_Start(user_id, user_pw) ; EKMLib 라이브러리 로딩

    ;Gui 스크립트를 작성하시면 됩니다.

    return

    F1::
    {
    state := true

    ;클릭 테스트를 할 좌표
    x := 518
    y := 255

    ;윈도우 타이틀
    winTitle := "Game"

    ;윈도우 타이틀의 HWND
    EKMLib_findHWND(winTitle, _hWnd)
    EKMLib_click(x, y, _hWnd)
    ;마우스클릭은 됩니다
    EKMLib_keydown(0x52, 0x130001, _hwnd)
    Sleep,1000
    EKMLib_keyup(0x52, 0xc0130001, _hwnd)
    ;키보드 입력은 되지 않습니다

    ;자식윈도우 검색
    e := EKMLib_findChildHWND(_hWnd, num)
    MsgBox, %num%
    ;찾은 자식윈도우가 21개 입니다

    ;자식윈도우 핸들을 사용한 비활성클릭 테스트.
    ;입력을 받는 자식윈도우를 찾는 용도로 사용하시면 됩니다.
    Loop, %num%
    {
    MsgBox, %A_Index%
    EKMLib_getChildHWND(_hWnd1, A_Index)
    EKMLib_keydown(0x52, 0x130001, _hwnd1)
    Sleep,1000
    EKMLib_keyup(0x52, 0xc0130001, _hwnd1)
    ;찾은 자식창4번에 입력이되는데 입력이되는곳이 비활성된 Game안에 비활성된 채팅창에 입력됩니다
    ;나머지는 아무 반응이 없습니다
    }
    }
    return


    F2::
    {
    EKMLib_Shutdown()
    ExitApp
    }
    return

    역시나 오핫으로는 안되는 부분이겠죠

  • 배움 2018.08.25 11:11  댓글주소  수정/삭제  댓글쓰기

    EKMLib_findHWND 의 경우 타이틀을 지정해서 가져오잖아요?

    일전에도 말씀드렸지만 전 크롬웹게임을 하기때문에 이것저것 배우며 현재는 잘 쓰고 있습니다.

    다만 이젠 두개를 돌리려고 하는데 EKMLib_findHWND 가져오는 타이틀이 동일 하거든요.

    PID는 당연히 틀릴테고 ID값도 틀릴꺼같은데...타이틀만 같은상황인데

    이런경우 어떻게 구분할수 있게 구현할수 있을까요?

    하나는 익스프롤러로 하려고 해도 이미지서치나 입력이 안되서 자식윈도우를 찾아보니 너무많이 나오네요.

    메소드 값을 1로 주고 해봐도 동일해서...

    익스프롤러에서 EKMLib라이브러리를 통한 이미지서치 등의 경우 특별한게 필요한가요?

    • 킴영감 2018.08.28 00:48 신고  댓글주소  수정/삭제

      오토핫키 명령어를 사용하면 PID로 윈도우 핸들을 받아올 수 있는 것으로 알고있습니다.
      정확히 어떤 명령어인지를 모르지만 도큐먼트페이지의 윈도우 제어부분에 있을겁니다.^^

  • 키키 2018.08.29 06:40  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 킴영감님 강좌도 잘 보았고 EMKLib을 유용하게 잘 사용하고 있던 사람입니다
    몇 분 전 부터 최신버젼을 확인 해 주세요, 서버 점검 중 입니다, 로그인이 필요합니다 등의 메시지가 뜨면서 매크로가 정상 작동하지 않네요
    몇 주 전에도 이런 증상이 있었던걸로 기억하는데 일정기간에 한번씩 있는 일인가요?

    • 킴영감 2018.08.29 20:28 신고  댓글주소  수정/삭제

      서버쪽 점검이 있어 새벽에 2시간정도 접속이 안된 것으로 알고있습니다.
      업체측에서 하는 점검이라 자주 있는일은 아니며 비 정기적입니다.^^

  • 항상 감사합니다 2018.09.12 17:30  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 같은 경상도 사람으로서 자랑스럽습니다. 그리고 응원합니다.ㅎㅎ

    혹시 비활성으로 인터넷 익스플로러 창을 실행시킬수 있는지요?

    지금은 run, https://naver.com 이런식으로 실행시키고 있습니다. ㅠㅠ

    그리고 이렇게 인터넷창을 띄우고 바로 자식핸들 값을 찾을시(ChildHWND_TestTool 사용)

    초기에 자식핸들 num이 0으로 나옵니다.

    부모핸들은 %_hWnd% 하면 값이 나오구요.

    그래서 마우스로 인터넷창 아무곳이나 클릭하고 다시 테스트툴로 자식핸들값을 찾으면 num이 나오구요.

    그리고 웃긴게 num값이 인터넷창을 닫고 새로 띄우면 가끔 달라집니다. ㅠㅠ

    저는 57, 47, 37 이 세가지 값중에 하나가 나오더라구요. 값들이 일정한 패턴으로 뜨는것도 아니구요 ㅠ

    num값이 0일때 비활성클릭, 비활성텍스트보내기, 비활성 이미지서치( 부모핸들로 함, 자식핸들값은 못찾았기 때문에)

    인터넷창 빈곳 클릭하는것은 의미가 없고

    일반 마우스 클릭이나 이미지서치를 써서 인터넷창 빈곳 클릭 실행으로 하면 되는데 지금 목적은 비활성이 목적이라 ㅠㅠ

    글 재주가 부족하여 두서없이 너무 긴글로 질문하였습니다 . 죄송합니다.

    혹시 시간되시면 가르침 부탁드리겠습니다. 감사합니다.^^

    • 킴영감 2018.09.14 23:35 신고  댓글주소  수정/삭제

      비활성으로 실행시킬 수는 없을 겁니다.^^

      자식윈도우의 개수는 계속 바뀝니다. 이건 만들어질 때 그렇게 만들어져있는 것 같습니다.

      그리고 익스플로러는 자식윈도우를 사용하지 않아도 비활성 입력이 가능한 것으로 알고있는데 아닌가요?

    • 버징가 2018.09.15 16:34  댓글주소  수정/삭제

      네 비활성으로 클릭할시 자식윈도우 사용하지 않으면 원하는 영역이 클릭이 안됩니다ㅠㅠ

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

      음...그럼 다른 해결책을 찾아보셔야 할 것 같네요.ㅠ

  • 아스라이 2018.09.14 21:57  댓글주소  수정/삭제  댓글쓰기

    #include EKMLib.ahk ; EKMLib 라이브러리 추가
    user_id := "guest" ; 따옴표 사이에 ID를 입력합니다.
    user_pw := "goodluck" ; 따옴표 사이에 PASSWORD를 입력합니다.
    EKMLib_Start(user_id, user_pw) ; EKMLib 라이브러리 로딩

    Gui, Add, Text, x30 y5 w100 h20, EKMlib 테스트
    Gui, Add, Button, x20 y30 w110 h20, 시작
    Gui, Add, Button, x20 y55 w110 h20, 종료
    Gui, Show

    return

    Button시작:
    {
    global _hWnd
    winTitle := "[MOMO]앱플레이어"

    EKMLib_findHWND(winTitle, _hWnd)

    EKMLib_findChildHWND(_hWnd, num)

    EKMLib_getChildHWND(_hWnd1, 1)

    e := EKMLib_inactiveImageSearch("Image", "1", x1, y1, x2, y2, _hWnd1, 0.95)
    EKMLib_click(x1, y1, _hWnd1)


    }
    return

    Button종료:
    {
    EKMLib_Shutdown()
    ExitApp
    }



    GuiClose:
    {
    EKMLib_Shutdown()
    ExitApp
    }
    return

    3번 강의를 듣고 요청합니다..ㅜㅜ

    ChildHWND_TestTool 로 클릭이 되는건 확인했습니다.. 1번창에서.. 그런데 이미지 서치관련해서는 언급이 잘 안되어있어서.. 일단 시도는 해봤는데 안되더군요 ..ㅜㅜ 그리고
    e := EKMLib_inactiveImageSearch("Image", "1", x1, y1, x2, y2, _hWnd1, 0.95) 이부분에서 e := 이게 이해가 안됩니다..ㅜㅜ

    해당하는 ahk파일이 있는폴더안에 Image라는 폴더 속 1.bmp 가 있으면 작동되야되는게 맞는거아닌가요?

    • 킴영감 2018.09.14 23:38 신고  댓글주소  수정/삭제

      e := 이 이해가 안된다구요?
      혹시 기초강의는 보셨나요?

      프로그래밍에대한 기본적인 이해가 있어야 EKMLib를 사용하실 수 있습니다.

      이미지서치함수를 실행한 결과를 e 변수에 받아오는 겁니다.
      그리고 테스트 하실 때 무조건 1번 이미지를 찾을 수 있는 상황에서 테스트하시면 1번이미지를 찾는 것을 확인하실 수 있을겁니다.^^

    • 아스라이 2018.09.15 00:30  댓글주소  수정/삭제

      아... 다시 찾아서 알아냈습니다..!! 감사합니다..

      추가로 궁금한점이 영상말미에 서치앤클릭을 알려주셔서 써보려했는데

      e := EKMLib_inactiveImageSearchAndClick("Image", "상자", x1, y1, x2, y2, _hWnd1, 0.80, 1)





      에러메세지
      C:\Users\akrma\Desktop\??\??\????\?????.ahk (27) : ==> Too many parameters passed to function.

      이건 뭘까요..ㅜㅜ

    • 킴영감 2018.09.15 00:38 신고  댓글주소  수정/삭제

      함수들 마다 사용되는 인자가 다릅니다.^^

      왠만하면 기초강의 중 함수 강의는 꼭 보시고 강의의 내용을 꼼꼼히 보시기 바랍니다.

      급하다고 강의를 대충보면 문제가 생기고 이 문제로 인해 더 많은 시간이 소요됩니다.^^

    • 아스라이 2018.09.15 00:56  댓글주소  수정/삭제

      해결하고 나서 지우러 왔는데 들켰습니다..ㅋㅋ A인자를 썼어야했군요.. 드디어 가닥은 잡혔네요.. 이제 UI랑 if 함수쪽으로 해봐야겠습니다. 많은 도움이 됩니다. 고마워요.

    • 킴영감 2018.09.15 01:07 신고  댓글주소  수정/삭제

      화이팅입니다^^

  • 2018.09.15 08:41  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 아스라이 2018.09.15 17:29  댓글주소  수정/삭제  댓글쓰기

    inactiveimagesearchandclickA 를 사용할 때 X축으로 00 Y축으로 00 된 지점을 클릭하라 라고 지정할 순 없나요? 함수명령을 봐도 범위만 지정가능하게나와서.. 궁금합니다.

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

      그런 기능은 없습니다.
      이미지서치 함수를 사용해 좌표를 얻어오고 원하는 만큼 이동하는 부분을 직접 작성하시면 됩니다.^^

  • 2018.09.16 10:28  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 2018.10.03 15:25  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 킴영감 2018.10.03 18:42 신고  댓글주소  수정/삭제

      함수명이 중복선언되었다고 뜨는건 중괄호 쌍이 안맞아서 발생하는 문제입니다.
      EKMLib_Start가 EKMLib.ahk에 선언되어 있는데 매인 스크립트에서

      EKMLib_Start()
      {

      이런식으로 작성이되면 오토핫키는 함수를 선언한다고 이해를하기때문입니다.

  • 넝오 2018.11.25 01:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 킴영감님. EKMLib 정말 잘 쓰고 있습니다. 윈도우 핸들을 따오는 함수 중에 질문이 있습니다.
    여러개의 핸들을 따오려고 array를 이용해 받아오려는데 혼자서는 잘 안되서 질문드립니다.
    예를 들어,
    global #_ID := 2
    global _ID_Array := ["아이디1", "아이디2"]
    global _hWnd_Array := []

    loop, %#_ID%
    {
    _hWnd_Array.Push()
    EKMLib_findHWND( _ID_Array[A_Index], _hWnd_Array[A_Index] )
    }

    이런식으로는 안되는 것 같은데 혹시 다른 방법이 있을까요?

    • 넝오 2018.11.25 02:07  댓글주소  수정/삭제

      dummy 변수를 사용해 해결했습니다.
      위 loop 안을

      loop, %#_ID%
      {
      EKMLib_findHWND(_ID_Array[A_Index], _dummy_hWnd)
      _hWnd_Array.Push()
      _hWnd_Array[A_Index] := _dummy_hWnd
      }

      이런식으로 해결했습니다. 감사합니다.

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

      우선 배열의 사용방법을 다시 공부하셔야 할 것 같습니다.
      Push 함수를 사용할 때 함수의 인자가 있어야 합니다.
      해결하신 스크립트에서 아래 부분은 필요없는 부분이 되는겁니다.
      _hWnd_Array.Push()

      유튜브 가시면 배열의 사용방법에 대한 강의가 있으니 공부하시면 될 것 같습니다.^^

  • 로카 2018.12.08 20:06  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 ^^ 라이브러리 잘 쓰고 있는데 문제가 하나 생겨서 여쭤보려고 댓글을 이리 남깁니다 ㅠㅠ

    이전에

    err1 := EKMLib_getChildHWND(_hWnd1, ChildHWND)
    err2 := EKMLib_inactiveMouseDrag(Randx1Pos, Randy1Pos, Randx2Pos, Randy2Pos, RandSpeed, 1, _hWnd1)

    이런 식으로 inactive mouse drag를 녹스 플레이어 6.1.0.0 에서 잘 쓰고 있었는데요,

    녹스 6.2.5.3 으로 업데이트 하니 갑자기 작동을 하지 않습니다... 이미지 서치는 작동을 하는데 말이죠 ㅠㅠ
    혹시나 해서 보니, 마우스 클릭도 작동을 하지 않습니다...
    이미 마우스 터치는 adbclick을 쓰고 있어서 괜찮았는데, 드래그가 문제가 되네요,...
    혹시 adbdrag는 라이브러리 화 하실 계획 없으신지요 ^^;
    아니면 녹스 6.2.5.3 에서 작동이 안되는 문제가 무엇일까요?

  • 로카 2018.12.09 00:31  댓글주소  수정/삭제  댓글쓰기

    왜 안되는걸까요 ㅠㅠ
    저 위에경우에 err1은 0으로 출력이 되는데, err2 값은 아무 값도 출력이 안되요 ㅠㅠ....

    지금 6.2.6.0 버전을 다운로드 받고 있는데...
    이쪽으로 다시 시도해 보겠습니다 ㅠㅠ

    • 로카 2018.12.09 01:51  댓글주소  수정/삭제

      ...음 뭐가 문제인지는 모르겠는데요;;
      nox 6.1.0.0 버전에서는
      global ChildHWND = 2

      이렇게

      ChildHWND_testtool 로 얻은 값을, global로 두고, 다른 함수에서 호출 할 때 마다,

      EKMLib_getChildHWND(_hWnd1, ChildHWND)
      EKMLib_inactiveMouseDrag(Randx1Pos, Randy1Pos, Randx2Pos, Randy2Pos, RandSpeed, 1, _hWnd1)

      이런식으로... touch든 drag든 호출해서 사용했는데요...

      지금 6.2.6.0 버전에서 다시 작동하게 하는거에선..

      일단, 이미지 서치를 위해서는
      6.2.6.0 버전에선

      global ChildHWND = 4
      으로 바꾸면
      이미지 서치는 작동 하는데,
      나머지 터치와, 드래그는 작동을 안하더라구요...

      그런데,
      EKMLib_getChildHWND(_hWnd1, 3)
      EKMLib_inactiveMouseDrag(Randx1Pos, Randy1Pos, Randx2Pos, Randy2Pos, RandSpeed, 1, _hWnd1)

      라고, 두면, drag가 작동하더라구요...

      image search는 ChildHWND 가 4일 경우에 작동하고, drag일 경웨는 ChildHWND 가 3일 경우에 작동하는것 같은데...
      어떻게된걸까요>

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

      녹스는 자식윈도우를 사용하지 않고 부모윈도우에서 모두 동작되지 않나요?
      그리고 기능마다 자식윈도우가 다를 수 있습니다. 각각 기능을 수행하는 윈도우를 찾으셨으면 그 윈도우를 사용하시면 됩니다.

    • 로카 2018.12.09 14:50  댓글주소  수정/삭제

      아! 그렇군요!!
      전 자식 윈도우를 통해서만 할수 있는줄 알았네요 ㅠㅠ;;

      뻘짓을 OTL...
      기능마다 사용하는 자식윈도우가 다를수 있는것도 알게 되었네요,...

      부모윈도를 통해서 하도록 코드를 수정했더니 잘 작동하네요! 감사합니다!! :D

  • 무니스 2018.12.13 07:30  댓글주소  수정/삭제  댓글쓰기

    if FileExist("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";)
    {
    Run, C:\Program Files (x86)\Google\Chrome\Application\chrome.exe ,, Max
    }


    Sleep, 2000
    WinGetPos,wx,wy,ww,wh, 새 탭 - Chrome
    ex := wx + ww
    ey := wy + wh
    EKMLib_findHWND("새 탭 - Chrome", _hWnd)
    ;MsgBox, %_hWnd%
    ;EKMLib_hideWindow(_hWnd)

    Sleep, 20000
    이미지서치("10", 1)
    비활성화 이미지서치에서 크롬을 띄우구 나서 EKMLib_hideWindow(_hWnd) 이렇게 크롬을 숨기면
    e := EKMLib_inactiveImageSearch("image",이미지파일, outx1,outy1,x2,y2, _hWnd, 0.95)
    MsgBox, %e%
    여기에 -1 값이 나옵니다.

    크롬을 숨기지 않으면 정상적으로 작동이 되는데 화면을 숨기면 이미지를 찾지 못하네요....

    저는 윈도우 10버젼이구 32bit 입니다....
    비활성관련 동영상 강의 다 따라하구 실습삼아 해보는데 잘 안되네요.. 원인이 뭔지 모르겠어요... emk라이브러리도 버젼에 맞게 해놓구 다 했는데.... 잘 안되네요.. 도움을 바랍니다..

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

      음...보니까 화면을 최대화 상태로 숨기셨는데 최대화가 아닌 상태에서는 테스트 해보셨나요?
      그부분 이외에는 모두 잘 적용하신 것 같구요
      라이브러리 내부적으로 최대화 상태에서 좌표 계산이 잘 안될 수 있을 것 같습니다.
      이부분은 제가 확인해보겠습니다^^

  • 그래도되나요 2018.12.15 09:46  댓글주소  수정/삭제  댓글쓰기

    혹시 비활성 이미지 서치에서 trans 기능은 사용이 안되는건가요??
    혹시 안된다면 업데이트가 가능하신지 궁금합니다!!

  • 킴영감님 사랑합니다 2018.12.15 12:38  댓글주소  수정/삭제  댓글쓰기

    블루스택4로 블소레볼 하고 있는데 비활성화 이미지서치가 안되던데 ㅠㅠ
    자식윈도우1 로해도 못찾더라고요 ㅠㅠ 비활성화 클릭은 가능하던데
    윈도우10이여서 개인설정에 Aero 가 불가능 하던데 그것 때문일까요?

  • 넝오 2018.12.23 17:21  댓글주소  수정/삭제  댓글쓰기

    EKMLib_inactiveImageSearch 와 EKMLib_inactiveImageSearchA 에 대한 질문입니다.

    예를 들어, 100x100 인 client화면에서 10x10 인 이미지를 검색했습니다.

    EKMLib_inactiveImageSearch 은 client 전체 화면에서 찾도록 하고,
    EKMLib_inactiveImageSearchA 로는 client 화면은 100개로 분할하여, 그 중 60개에 대해서 찾도록 하였습니다. 물론 이미지를 찾으면 바로 빠져나오도록 했습니다.

    즉, EKMLib_inactiveImageSearchA는 client화면의 60% 만 검색한 것이죠.
    하지만 서치 속도는 EKMLib_inactiveImageSearchA를 이용한 두번째 방법이 속도가 현저히 낮았습니다.

    이유가 무엇인가요? 두 번째 방법이 이미지를 60번 불러오기 때문인가요?

    이런 방법으로 cpu 사용량 감소와 검색 속도를 높이려고 했으나 잘 안됬네요..

    • 킴영감 2018.12.23 19:08 신고  댓글주소  수정/삭제

      간단하게 설명드리면 함수를 처리하는데 여러가지 절차가 있고 단순이 이미지 사이즈가 작아진다고 소모되는 시간이 선형적으로 줄어드는게 아니기 때문입니다.
      결과적으로 함수를 60번 호출하는동안 이미지를 처리하는 것 이외의 작업들이 시간이 누적되어 이미지를 찾는 영역은 줄어들지만 시간은 더 많이 소모되는 겁니다.

    • 넝오 2018.12.23 19:56  댓글주소  수정/삭제

      그렇군요.. 감사합니다 비활성 서치를 만들어 보고 싶은데 gdip를 이용하면 될까요? 추가적인 공부는 해야겠지만요 ㅠ 컴퓨터를 바꾸던가..

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

      EKMLib를 사용하지 않고 직접 만드시려면 gdip를 사용하시면 될겁니다.^^

  • 로카 2018.12.27 17:57  댓글주소  수정/삭제  댓글쓰기

    중복으로 실행하지 않고, 하나의 오토핫키만 실행하고 있는데,
    가끔? 보다 생각보다 자주, 하루에 한두번은 도중에 갑자기
    중복 로그인되어 로그아웃됩니다ㅡ
    라는 메세지와 함께 매크로가 멈추곤 합니다.
    이게 어떻게 된 일일까요?

  • 질문이요! 2018.12.29 17:39  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 영감님 영상보고 매크로를 제작 했습니다 완성했구요

    그런데 문제가 잘작동하다가 갑작이 반응을 안합니다
    매크로를 재시작 해도 반응을 안하더군요
    녹스 쓰고있구요
    녹스를 재실행해야 작동합니다 그런데 이것마저도 작동하다가 말구요 왜이런걸까요?

  • 친구 2019.02.08 18:07  댓글주소  수정/삭제  댓글쓰기

    그런데 비활성화 한다고 하더라도, 좌표클릭이 똑같은데를 자꾸 반복해서 찍으면
    게임회사에서 제제먹이던데.. 아무래도 좌표클릭을 매번 다르게 찍게 하는게 나은가요..? 김영감
    님의 의견을 듣고싶습니당