본문 바로가기
매크로

오토핫키 이미지 서치 화면 스크롤

by 백수아저씨 2022. 3. 19.
반응형

완전 초보의 오토핫키 매크로 만들기. (키보드 제어하는 방법)

 

오토핫키 매크로, 화면 스크롤, 이미지 서치, 파이썬 매크로, C# 매크로, 엔지엠 매크로, 하드웨어 매크로, 픽셀 서치

매크로 커뮤니티, 매크로 제작 의뢰, 비활성 매크로, 무료 매크로 다운로드 http://ngmsoftware.com 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

 

안녕하세요. 엔지엠소프트웨어입니다. 오토핫키를 이용한 매크로 만들기 3번째 이야기입니다^^; 오늘은 키보드를 제어하는 방법에 대해 자세하게 알아보도록 할께요. 우선, 오토핫키를 개발할 수 있는 환경을 만들어야 하는데요. 아직 개발 환경이 없는 분들은 1부 내용과 2부 내용을 참고하시기 바랍니다.

[ 1부 - 오토핫키 개발 환경 만들기 ]

[ 2부 - 오토핫키 마우스 매크로 만들기 ]

 

비주얼 스튜디오 코드(VSCode)를 실행하고, 새로운 스크립트를 추가합니다. 아래 그림과 같이 저는 "keyboard.ahk"를 만들었습니다.

 

 

아래와 같은 코드를 작성 해줍니다. 1초 쉬었다가~ NGM을 입력하고, software를 입력합니다. 그리고, 마지막에 엔터(Enter)로 줄바꿈 해줍니다.

#SingleInstance, Force
SendMode Input
Sleep, 1000
SetWorkingDir, %A_ScriptDir%
SendInput, NGM
SendInput, software
Send {Enter}

 

 

이 스크립트를 실행 해보면 아래 동영상과 같이 동작하는걸 확인할 수 있습니다. 메모장에 NGMsoftware를 입력하고, 줄바꿈이 됩니다.

 

 

키보드를 입력할 때 send와 sendInput을 사용했습니다. send는 문자를 하나씩 처리하고, sendInput은 한번에 처리합니다. 이 둘의 차이를 확인하기 위해 코드를 아래와 같이 변경하고 다시 실행 해보세요. sendInput을 send로 모두 변경했습니다. 이 테스트는 유심히 봐야 합니다. 한문자씩 입력한다고 해도 식별하기 어려울정도로 빠르니까요^^;

#SingleInstance, Force
SendMode Input
Sleep, 1000
SetWorkingDir, %A_ScriptDir%
Send, 안녕하세요. 엔지엠소프트웨어입니다.
Send, 오토핫키를 학습하는 뉴비입니다. 같이 열심히 공부합니다!!
Send {Enter}

 

 

여러분들도 한글이 정상적으로 표시되지 않을 수 있습니다. 엔지엠 에디터로 동일하게 테스트를 해볼까요?

 

 

키보드 입력 액션으로 엔터도 추가 해줍니다.

 

 

엔지엠 에디터에서는 한글이 정상적으로 입력되는걸 확인할 수 있습니다.

 

 

오토핫키는 외국에서 개발된 프로그램입니다. 그래서, 한글에 대한 지원이 잘되지는 않습니다. 그렇다고해서 사용할 수 없는건 아닌데요. 프로그램의 인코딩을 변경해주면 정상적으로 이용이 가능합니다. Visual Studio Code의 하단에 UTF-8을 클릭하세요.

 

 

인코딩하여 다시 열기는 1회성으로 현재 파일의 인코딩을 변경해서 다시 열어줍니다. 저처럼 이것저것 마구 개발하는 경우에는 첫번째로 테스트를 해볼 수 있습니다. 두번째 옵션은 인코딩 설정을 기본으로 처리해줍니다. 오토핫키를 이용해서 매크로를 개발하는 경우 이 옵션으로 설정해주면 됩니다.

 

 

한국어(Korean (EUC-KR)로 설정 해주세요.

 

 

참고로, 간단한 메모장과 같은 프로그램을 에디터로 사용한다면 인코딩이 몇개 없을 수 있습니다. 이런 경우에는 유니코드로 변경하고 저장하면 됩니다. 콘트롤+S를 눌러서 파일을 다시 저장하고, 실행 해보세요. 아래 동영상처럼 한글이 정상적으로 표시되는걸 확인할 수 있습니다.

 

 

다시 코드로 돌아와서 중괄호(ex: {Enter})를 사용하면 키보드의 키를 누르게 됩니다. Enter는 문자를 타이핑하게 되고, {Enter}는 키보드의 엔터키를 누릅니다. 그래서, 코드의 마지막줄에 send {Enter}로 줄바꿈을 해준것입니다. 이건 꼭 기억하고 넘어가야 합니다. 줄바꿈이나 스페이스, 백스페이스와 같이 자주 사용되니까요. 마지막으로 한영에 대해 알아볼께요. 코드를 아래와 같이 변경 해줍니다. 마지막줄에 "Welcome to NGMsoftware!" 영어가 추가 되었습니다.

#SingleInstance, Force
SendMode Input
Sleep, 1000
SetWorkingDir, %A_ScriptDir%
Send, 안녕하세요. 엔지엠소프트웨어입니다.
Send, 오토핫키를 학습하는 뉴비입니다. 같이 열심히 공부합니다!!
Send, Welcome to NGMsoftware!
Send {Enter}

 

 

여기서 생각해볼 문제가 하나 있습니다. 우리가 메모장에 텍스트를 입력할 때 한글을 입력하다가 영어를 입력하려면 어떻게 할까요? 한영 변환 키를 누르겠죠? 아쉽게도 오토핫키에서 한영키는 버추얼 키코드를 사용해야 합니다. 한영키는 vk15sc138입니다. 몇몇 이름으로 매핑되지 않은 가상키들은 어쩔 수 없이 외워야 하는데요. 개발자도 이런걸 외워서 사용하는 경우는 거의 없습니다. 가상 키코드는 마이크로소프트 홈페이지에 정리되어 있습니다. 아래 링크를 참고하세요.

[ Virtual Keycode List ]

#SingleInstance, Force
SendMode Input
Sleep, 1000
SetWorkingDir, %A_ScriptDir%
Send, 안녕하세요. 엔지엠소프트웨어입니다.
Send, 오토핫키를 학습하는 뉴비입니다. 같이 열심히 공부합니다!!
send, {vk15sc138}
Send, Welcome to NGMsoftware!
Send {Enter}

 

 

엔지엠 에디터에서도 동일하게 테스트 해봅시다. [ 텍스트 쓰기 ] 액션의 마지막에 영어를 추가 했습니다.

 

 

실행하면 한영키를 누르지 않았는데도 자동으로 변환되는걸 알 수 있습니다. 엔지엠 매크로에는 IME(한영) 모드를 감지해서 자동으로 처리할 수 있는 스마트한 기능이 포함되어 있기 때문입니다. 그렇다고 해서 오토핫키를 개발할 때 항상 한영키를 고려해가면서 코딩해야 하는건 아닙니다. 복잡한 자동화 매크로를 만들 때 이런것들이 의도하지 않은 동작을 유발하거나 버그를 만들기 때문입니다.

 

 

오토핫키(AutoHotKey)에서 문자를 감지해서 한영키를 누르려면 아래와 같이 함수를 만들어서 체크해도 됩니다. 코드가 생각보다 간단해서 쉽게 이해할 수 있는데요. IME_CHECK에 특정 창의 이름을 넘기면 해당 창의 IME 모드를 감지해서 한영키를 누르도록 해줍니다.

App  key:          -> English Mode
Right-win key:     -> Hangul Mode

IME_CHECK(WinTitle)
{
    WinGet,hWnd,ID,%WinTitle%
    Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x005,"")
} 

Send_ImeControl(DefaultIMEWnd, wParam, lParam)
{
    DetectSave := A_DetectHiddenWindows      
    DetectHiddenWindows,ON                          

     SendMessage 0x283, wParam,lParam,,ahk_id %DefaultIMEWnd%
    if (DetectSave <> A_DetectHiddenWindows)
        DetectHiddenWindows,%DetectSave%
    return ErrorLevel
} 

ImmGetDefaultIMEWnd(hWnd)
{
    return DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
}

Rwin::
    ret := IME_CHECK("A")
    if %ret% = 0                 ; 0 :English
    {
        Send, {vk15sc138}  
    }
return 

AppsKey::
    ret := IME_CHECK("A")
    if %ret% <> 0               ; 1 Hangul
    {
        Send, {vk15sc138}  
     }
return

 

아직 오토핫키의 함수에 대해 배우질 않았기 때문에 이렇게 사용할 수 있다는 정도만 알고 넘어가도 될거 같습니다. 오토핫키도 엄연히 프로그래밍 언어입니다. 그렇다보니 깊이 들어갈수록 어려워질 수 밖에 없습니다. 대부분 오토핫키의 엄청난 기능들을 다 활용하지 못하고, 자주 사용하는 몇가지를 반복하면서 만듭니다. 예를 들어 마우스 클릭, 슬립, 키보드 입력등등... 여기서 좀 더 발전하면 비활성으로 동작할 수 있는 API들을 좀 더 사용합니다. 마음에 여유를 가지고 천천히 하나씩 하다보면 언젠가는~ 자신의 업무를 완벽하게 자동화 할 수 있는 날이 올겁니다. 포기하지만 않는다면요^^

 

한글매크로, 주식, 코인, 선물 매크로, 차트 픽셀 감지 매크로, 지존오토, 마우스 매크로, 자동매매, 단타거래, 화면 인식

매크로 커뮤니티, 매크로 제작 의뢰, 엔지엠 RPA 매크로, 매크로 무료 다운로드 http://ngmsoftware.com 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

 

반응형