본문 바로가기
매크로

3부 - 파이썬 키보드 매크로 만들기. (Creating a Python keyboard macro.)

by 매크로제작 2021. 11. 20.
반응형

무료 클릭 매크로 다운로드 받기 http://ngmsoftware.com

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

안녕하세요. 엔지엠소프트웨어입니다. 파이썬으로 마우스를 제어하는 매크로를 같이 만들어봤는데요. 아직 내용을 안보신 분들은 [ 1부 ]와 [ 2부 ]를 읽어보시고 오시길 바랍니다. 파이썬 매크로를 만들기 위한 환경을 구성해야 이 내용도 학습할 수 있기 때문입니다. Visual Studio Code를 실행하고, Start.py를 열어주세요. 파이썬으로 매크로 만들기를 처음부터 따라하신 분들은 아래와 같이 되어 있을겁니다.

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 마우스를 내문서 위치로 이동합니다.
pyautogui.moveTo(39, 23)
# 왼쪽 누른 후 좌표로 듀레이션만큼 이동합니다.
pyautogui.dragTo(39, 500, 3)

 

 

게임 매크로나 업무용 자동화 매크로 또는 주식을 자동으로 매매하려는 분들은 이미지 서치와 마우스 클릭만으로도 충분히 반자동 매크로를 만들 수 있을겁니다. 완전 자동화를 하려면 이미지 서치뿐만 아니라 키보드와 OCR(광학 문자 인식, Optical Character Recognition)이 필요합니다. 이외에도 다크넷의 욜로나 예외 상황에 대처할 수 있는 추가적인 응용 능력도 갖춰야 합니다. 대부분은 엔지엠 에디터를 사용하면 프로그래밍을 몰라도 완전한 무인 자동화를 만들 수 있습니다.

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 메모장을 클릭합니다.
pyautogui.click(150, 100)
# 메모장에 텍스트를 입력합니다.
pyautogui.write("Hello~ NGMsoftware!")

 

 

비활성 모드로 텍스트를 입력하는건 아니라서 메모장을 한번 클릭해줘야 합니다. 해당 창이 활성화되어야 키보드 입력이 들어가니까요~ 좀 더 천천히 텍스트를 입력하려면 어떻게 해야 할까요? 아래와 같이 인터벌(Interval, 간격: 시간적인)을 설정하면 됩니다. 엔지엠 에디터는 랜덤하게 타이핑하듯이 작성할 수 있지만 파이썬은 약간 제약이 있네요. 물론, down, up으로 char를 넘겨서 처리하면 가능합니다^^;

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 메모장을 클릭합니다.
pyautogui.click(300, 100)
# 메모장에 텍스트를 입력합니다.
pyautogui.write("\nHello~ NGMsoftware!", interval=0.3)

 

 

조합키를 입력하려면 어떻게 해야 할까요? Ctrl+A, Ctrl+C, Ctrl+V와 같은 키들을 말합니다. 이외에도 조합키는 많지만, 예제로 사용하기에는 가장 좋은 단축키들입니다. 메모장에 있는 내용들을 전체 선택하고, 복사한 후 다른 메모장에 붙여넣기 하는 방법입니다. 아래 코드를 붙여넣기하고 실행(F5) 해보세요.

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 메모장을 클릭합니다.
pyautogui.click(300, 100)
# 메모장에서 전체 선택합니다.
pyautogui.keyDown("ctrl")
pyautogui.keyDown("a")
pyautogui.keyUp("a")
pyautogui.keyUp("ctrl")
# 메모장에서 선택 영역을 복사합니다.
pyautogui.keyDown("ctrl")
pyautogui.keyDown("c")
pyautogui.keyUp("c")
pyautogui.keyUp("ctrl")
# 붙여넣기 할 메모장을 클릭합니다.
pyautogui.click(300, 600)
# 클립보드 내용을 메모장에 붙여넣기 합니다.
pyautogui.keyDown("ctrl")
pyautogui.keyDown("v")
pyautogui.keyUp("v")
pyautogui.keyUp("ctrl")

 

 

보통은 이렇게 사용하지 않고 있습니다. 좀 더 편하게 사용할 수 있는 핫키 함수가 있는데요. 아래와 같이 코드를 변경하고 다시 실행 해보세요.

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 메모장을 클릭합니다.
pyautogui.click(300, 100)
# 메모장에서 전체 선택합니다.
pyautogui.hotkey("ctrl", "a")
# 메모장에서 선택 영역을 복사합니다.
pyautogui.hotkey("ctrl", "c")
# 붙여넣기 할 메모장을 클릭합니다.
pyautogui.click(300, 600)
# 클립보드 내용을 메모장에 붙여넣기 합니다.
pyautogui.hotkey("ctrl", "v")

 

 

코드량을 많이 줄었는데요. 동작은 동일합니다^^; 마지막으로 알아볼 함수는 press입니다. spy++을 이용해서 윈도우 메시지를 확인 해보면 키보드는 keyDown, keyPress, keyUp으로 동작하는걸 알 수 있습니다. 위에서 조합키를 만들 때 keyDown(Ctrl), keyDown(A), KeyUp(A), KeyUp(Ctrl)과 같이 만들었습니다. 대부분은 정상 동작할겁니다. 하지만, 윈도우 메시지를 인터셉트해서 분석하는 소프트웨어라면 명령이 수행되지 않을수도 있습니다. 대부분의 매크로 프로그램들이 단순하게 작성되기 때문이죠. 그래서 처음 코드를 아래와 같이 작성하는게 더 좋습니다.

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 메모장을 클릭합니다.
pyautogui.click(300, 100)
# 메모장에서 전체 선택합니다.
pyautogui.keyDown("ctrl")
pyautogui.keyPress("a")
pyautogui.keyUp("ctrl")
# 메모장에서 선택 영역을 복사합니다.
pyautogui.keyDown("ctrl")
pyautogui.keyPress("c")
pyautogui.keyUp("ctrl")
# 붙여넣기 할 메모장을 클릭합니다.
pyautogui.click(300, 600)
# 클립보드 내용을 메모장에 붙여넣기 합니다.
pyautogui.keyDown("ctrl")
pyautogui.keyPress("v")
pyautogui.keyUp("ctrl")

 

이보다 더~ 정직하게 소프트웨어 자동화가 아닌것처럼 하려면 전부 keyDown, keyPress, keyUp으로 만들어주는게 좋습니다. 실제 하드웨어 키보드의 5초간 키를 누르고 있는 윈도우 메시지를 보면 아래와 같이 입력되는걸 알 수 있습니다.

down press press press ... up

 

소프트웨어로 키보드를 누르고 있으면 보통은 down과 up만 존재합니다. 이걸로 소프트웨어 신호인지 금방 알 수 있게됩니다. 키를 누르고 있는 효과를 내려면 아래와 같이 코드를 변경할 수 있습니다.

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 메모장을 클릭합니다.
pyautogui.click(300, 100)
# 메모장에 A를 계속 입력합니다.
pyautogui.keyDown("shift")
pyautogui.press("a", presses=10)
pyautogui.keyUp("shift")
pyautogui.press('enter', presses=3, interval=3)

 

 

자~ 이제 진짜 마지막인데요. 위의 예제들은 전부 영문으로만 입력하고 있었습니다. 한글로 입력을 해볼까요?

# pyautogui 모듈을 가져옵니다.
import pyautogui
# 메모장을 클릭합니다.
pyautogui.click(300, 100)
# 메모장에 A를 계속 입력합니다.
pyautogui.write("안녕하세요. 엔지엠소프트웨어입니다.")

 

 

위의 결과와 같이 파이썬에서 한글은 입력할 수 없습니다-_-; IME 모드를 감지해서 스마트하게 한영을 전환해주지도 못하죠~ 물론, win32api를 이용하면 ActiveWindow의 IME 상태를 가져올 수 있긴합니다. 개발자가 아니라면 이런 세세한 부분까지 신경써서 만드는건 불가능합니다. 개발자라고 하더라도 혼자 쓰는 경우에는 환경을 어느정도 맞춰놓고 쓰기 때문에 문제가 되지 않죠. 엔지엠 에디터처럼 범용적인 소프트웨어가 만들기 어려운 이유가 바로 여기에 있습니다. 모든 경우의 수를 대비해야 하기 때문이죠. 동의하지 않는 분들도 많을겁니다^^; 편법이긴 하지만~ 클립보드에 텍스트를 넣고 대상 윈도우에서 Ctrl+V(붙여넣기)를 입력하는 방법입니다. 아무래도~ 이 방법은 부정확하고 불편하죠.

# pyautogui 모듈을 가져옵니다.
import pyautogui
# pyperclip 모듈을 가져옵니다.
import pyperclip
# 클립보드에 텍스트를 복사합니다. 
pyperclip.copy("안녕하세요. 엔지엠소프트웨어입니다.") 
# 메모장을 클릭합니다.
pyautogui.click(300, 100)
# 메모장에 클립보드 내용을 붙여넣기 합니다.
pyautogui.hotkey("ctrl", "v")

 

 

아래 내용을 참고해서 필요한 키보드를 입력해보세요.

['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',
'browserback', 'browserfavorites', 'browserforward', 'browserhome',
'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',
'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',
'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',
'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',
'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',
'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',
'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',
'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',
'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',
'command', 'option', 'optionleft', 'optionright']

 

다음에는 여러분들이 기다리던~ OpenCV와 이미지 서치(템플릿 매칭)에 대해 알아볼께요. 마우스, 키보드, 이미지 서치 매크로를 만들 수 있으면, 누구나 쉽게 자동 사냥이나 자동 매매 또는 거래를 할 수 있을겁니다. 이외에도 단순 반복적인 업무를 자동화하고 결과를 편하게 받아볼 수 있죠. 파이썬 환경을 구성하고 마우스와 키보드 제어하는 매크로를 만들기까지 한두시간이면 충분할겁니다. 몸값이 비싼 개발자에게 의뢰하기 보다는 직접 만들어보는건 어떨까요^^?

 

매크로 만들기 강좌 4부 보기 http://ngmsoftware.com

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글