본문 바로가기
[최대48만원] 인터넷•TV 가입시 설치당일 현금지급 정수기 렌탈시 최대50만원 추가지급
매크로

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

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

 

반응형

댓글