본문 바로가기

키보드 매크로

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

반응형

무료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product1&wr_id=32 

 

엔지엠소프트웨어

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

www.ngmsoftware.com

#매크로 #매크로프로그램 #메크로 #g매크로 #마우스매크로 #키보드매크로 #엑셀매크로 #키매크로 #수강신청매크로 #로지텍마우스매크로 #매크로키보드 #파이썬매크로 #매크로뜻 #매크로마우스 #로지텍매크로 #ld플레이어매크로 #오토마우스매크로 #키보드마우스매크로 #오토핫키매크로 #이미지매크로 #이미지인식매크로 #하드웨어매크로 #화면인식매크로 #선착순구매매크로 #이미지서치매크로 #한글매크로


 

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

 

 

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

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

 

 

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

https://youtu.be/mc9sP4sDCLI

 

 

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

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

 

 

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

 

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

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

https://youtu.be/nAoIKuLZ9Lo

 

 

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

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줄이나 작성해야 하는군요. 이제 스크립트를 실행 해볼까요? 아래 동영상처럼 기존 텍스트를 복사한 후 다음줄에 붙여넣기 합니다.

https://youtu.be/7sUs4blcaTw

 

 

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

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

 

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

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

 

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

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

 

 

 

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

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

 

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

https://youtu.be/4UaFmAq7lYc

 

 

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

https://youtu.be/zOu7UNzkKbA

 

 

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

https://youtu.be/stib5QZBLE4

 

 

오토핫키도 프로그램의 한영 모드를 감지해서 자동으로 처리해줄 수 있습니다. 코드가 좀 복잡하긴 하지만요^^; 어차피 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가 어느정도 익숙해지면 다시 코딩을 하고 싶어질수도 있는데요. 이때를 위해서 오토핫키 관련 내용들도 틈틈히 봐두시는게 좋을거 같습니다. 일부 기능은 코드 몇줄로 더 편리하게 사용할 수 있기 때문입니다^^


[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

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

www.ngmsoftware.com

#비활성매크로 #g102매크로 #철권매크로 #레이저마우스매크로 #ghub매크로 #녹화매크로 #키보드반복매크로 #로지텍마우스광클매크로 #플라스크매크로 #윈도우매크로 #비활성g매크로 #오토매크로 #자동사냥 #주식매크로 #오토핫키키보드 #오토핫키마우스 #오토핫키이미지 #지존오토 #기계식매크로 #하드웨어매크로 #무한반복매크로 #대량이메일발송매크로 #엑셀VBA매크로 #주식모니터링매크로

반응형