NGMsoftware

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

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

    팁 앤 테크

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

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

    에디터 오토핫키 매크로 - 키보드 입력하는 방법. (Send, SendInput)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오토핫키 명령으로 키보드 입력 방법에 대해 알아보도록 하겠습니다. 테스트를 위해 엔지엠 에디터를 실행하고, 새로운 스크립트를 추가하세요.

    cnOuw3h.gif

     

     

    [ 오토핫키 코드 실행 ] 액션을 추가하고, 아래와 같이 코드를 작성하세요.

    WinActivate, 제목 없음
    Send, 안녕하세요.
    Send, {Enter}
    Send, NGMsoftware입니다.

    bQNGgBH.png

     

     

    WinActivate는 윈도우에서 실행중인 프로그램을 맨 앞으로 가져옵니다. 인자로 창 제목을 넣어줬는데요. 메모장을 활성화한 후 텍스트를 쓰기 위함입니다. WinActivate 함수에 대해서는 별도로 따로 글을 작성하도록 하겠습니다. 스크립트를 실행하면 아래 동영상처럼 메모장이 활성화되고, 텍스트가 써집니다.

     

     

    이번에는 SendInput 함수로 텍스트를 입력 해볼까요? 이 스크립트를 실행해도 Send와 동작은 동일합니다.

    WinActivate, 제목 없음
    SendInput, 안녕하세요.
    SendInput, {Enter}
    SendInput, NGMsoftware입니다.

    0cf8q3o.png

     

     

    Send와 SendInput은 윈도우 API를 어떤걸 사용하느냐의 차이입니다. Send는 기본적으로 SendEvent를 사용합니다. SendInput은 더 빠르고 안정적이지만, 모든 상황에서 동작하는건 아닙니다. 키보드 입력에 지연이 필요한 상황에서는 SendInput을 사용할 수 없습니다. 또한, 특정 프로그램에서는 SendInput이 예상한데로 작동하지 않을 수 있습니다. 특히 게임과 같은곳에서는 거의 작동하지 않는다고 생각하시면 됩니다^^; 하지만, 속도가 중요한 작업이라면 SendInput을 고려해봐야 합니다. 충분히 테스트하고 검증 후 문제가 없다면 SendInput을 사용하는게 좋은 선택입니다.

     

    특수 문자를 입력하는 방법은 아래와 같습니다.

    • 특수 문자: *%^#
    SendInput, {*}`%{^}{#}

     

     

    방향키 또는 화살표 키를 누르고 있으려면 아래와 같이 처리할 수 있습니다.

    WinActivate, *제목 없음
    Send, {Down down} ;아래 화살표 키를 누릅니다.
    Sleep, 1000 ;1초동안 대기합니다.
    Send, {Down up} ;아래 화살표 키를 뗍니다.

     

    키를 누른 상태에서 다른 키 누르는 방법은 아래와 같이 처리할 수 있습니다.

    WinActivate, *제목 없음
    SendInput, {CtrlDown}c{CtrlUp}
    SendInput, {CtrlDown}v{CtrlUp}

     

    메모장에 "안녕하세요. NGMsoftware입니다!" 텍스트를 입력하세요. 이 텍스트를 복사 붙여넣기하려면 어떻게 해야 할까요? 메모장을 선택(WinActivate)하고, 콘트롤+A로 전체 선택합니다. 그리고, 콘트롤+C로 복사합니다. 엔드키로 선택 해제와 동시에 마지막으로 이동하고 엔터키를 누릅니다. 콘트롤+V로 붙여넣기하면 작업이 완료됩니다.

    WinActivate, *제목 없음
    SendInput, {CtrlDown}a{CtrlUp}
    SendInput, {CtrlDown}c{CtrlUp}
    SendInput, {End}
    SendInput, {Enter}
    SendInput, {CtrlDown}v{CtrlUp}

     

    직접 메모장에 어떤 글자를 복사해서 붙여넣기하는게 별거 아니지만, 이런 단순한 동작도 컴퓨터에게 시키려면 하나하나 친절하게 설명해줘야 합니다. 복사 붙여넣기가 6줄이나 작성해야 하는군요. 이제 스크립트를 실행 해볼까요? 아래 동영상처럼 기존 텍스트를 복사한 후 다음줄에 붙여넣기 합니다.

     

     

    키보드를 반복해서 입력하려면 아래와 같이 처리합니다.

    WinActivate, *제목 없음
    Send, {Enter 5} ;엔터키를 5번 누릅니다.
    Send, +{TAB 4} ;시프트+탭키를 4번 누릅니다.

     

    참고로, +는 시프트키를 나타냅니다. 위에서 특수문자를 처리하는 방법은 알아봤는데요. 이렇게 특수문자가 특수키로 사용되기 때문입니다.

    • 알트키: !
    • 컨트롤키: ^
    • 윈도우키: #
    • 시프트키: +

     

    자 그러면, 콘트롤키로 마우스 휠을 굴리는 방법도 쉽게 할 수 있을겁니다. 우선, 메모장으로 마우스가 이동해야 하기 때문에 MouseMove를 먼저 사용했습니다.

    WinActivate, *제목 없음
    MouseMove, 300, 300
    Send, ^{WheelUp 5} ;컨트롤+마우스휠을 위로 5회 굴립니다.

     

     

    자~ 그러면 {Enter}를 문자 그대로 입력하고 싶으면 어떻게 해야 할까요? 그럴때는 SendRaw를 사용하면 됩니다.

    WinActivate, *제목 없음
    SendRaw, {Enter}

     

    마지막으로 한영 전환에 대한 이야기입니다. 엔지엠 매크로는 자모를 분석해서 자동으로 한영을 변환해주는 스마트 기능이 포함되어 있습니다. 하지만, 일부 프로그램에서 한영 모드를 제대로 판단하지 못하는데요. 대부분 Input 컨트롤이 아닌 경우 어쩔 수 없이 발생하는 문제점입니다. 메모장의 처음 입력 상태를 한글로 설정하고 아래와 같이 실행 해보세요. 한글과 영어가 섞여 있는 경우 한글 입력 모드에서는 정상적으로 동작하지 않습니다.

     

     

    이번에는 메모장의 한영 모드를 영어로 변경하고, 다시 실행 해보세요. 이번에는 잘 입력하죠?

     

     

    엔지엠 매크로의 텍스트 쓰기 액션으로 동일하게 메모장 한영 모드를 한글과 영어로 번갈아가면서 테스트 해보세요. 아래 동영상처럼 엔지엠 매크로의 텍스트 입력은 한영 모드에 상관없이 정상적으로 한글과 영어 그리고, 특수문자를 분리해서 잘 입력하고 있습니다.

     

     

    오토핫키도 프로그램의 한영 모드를 감지해서 자동으로 처리해줄 수 있습니다. 코드가 좀 복잡하긴 하지만요^^; 어차피 C++로 되어 있다보니 윈도우 API인 imm32 라이브러리를 가져다가 체크해보면 현재 상태를 알 수 있게됩니다. 한영 모드를 알면 그 다음부터는 한영키를 변환해서 최초 실행시 무조건 영어 모드로 변경해주면 됩니다. 인터넷에 한영키 감지 및 자동 변환으로 검색해보면 많은 자료들이 나올겁니다. 아래는 오토핫키 자동 한영키 변환 코드입니다.

    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)
    }
    
    !vk15sc1F2::                    ; I want Alt-[Eng/Han] key to be "Absolutely Hangul(Korean)" mode key. I hate toggling :(
        ret := IME_CHECK("A")
        if %ret% = 0                ; 0 means IME is in English mode now.
        {
            Send, {vk15sc138}       ; Turn IME into Hangul(Korean) mode.
        }
    
    return
    
    ^vk15sc1F2::                    ; I want Ctrl-[Eng/Han] key to be "Absolutely English" mode key. I hate toggling :(
        ret := IME_CHECK("A")
        if %ret% <> 0               ; 1 means IME is in Hangul(Korean) mode now.
        {
            Send, {vk15sc138}       ; Turn IME into English mode.
         }
    
    return

    출처: http://www.autohotkey.co.kr/cgi/board.php?bo_table=script&wr_id=357

     

    개발자가 보기에는 크게 무리가 없는 코드입니다. 친절하게 주석까지 달려있어서 코드를 쉽게 이해할 수 있었습니다. 하지만, 코딩을 안해본 일반인분들이라면 코드를 이해하는데 약간(?) 어려움이 있을 수 있습니다. 그래서, 엔지엠 에디터의 자동 기능을 사용하시는게 더 쉬울겁니다. 엔지엠 매크로의 GUI가 어느정도 익숙해지면 다시 코딩을 하고 싶어질수도 있는데요. 이때를 위해서 오토핫키 관련 내용들도 틈틈히 봐두시는게 좋을거 같습니다. 일부 기능은 코드 몇줄로 더 편리하게 사용할 수 있기 때문입니다^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.