컴퓨터/Python

Python (1) - 파이썬을 이용하여 매크로 만들기

달서비 2021. 1. 8. 13:56

개요

파이썬을 이용하여 간단한 매크로 프로그램을 제작해보는 시간을 가져보려고 합니다

주의 : 매크로 만들다가 일어나는 법적 책임은 본인이 쥐어야 합니다. (악용하시는 분들은 없기를...)

 

알아야 할 것 (라이브러리)

pyautogui (매크로에서 핵심요소, 여기서는 일부만 적지만 다양한 매크로 구현을 하기 위해
라이브러리 읽는 것을 권장한다.)
https://pyautogui.readthedocs.io/en/latest/#
position() 현재 마우스위치를 추출한다 
move(100,200) (100,200) 위치로 이동
click() 마우스 클릭
click(button='right') 오른쪽 마우스 클릭
click(x=100, y=200) (100,200) 위치에 마우스 클릭
click(interval=1) 시간 간격을 두고 클릭 ( 밑에 딜레이 요소를 하나 더두기는 하지만 편한거를 사용하기위해 일단 올린다)
doubleClick() 마우스 더블클릭
dragTo(x=100, y=200) 현재위치에서 (100,200)으로 드래그
press('f5') f5를 누른다 (그외 'a'등의 알파벳 'space' 등 다양한 키가있다)
typewrite('macro', interval=0.1) macro라고 자판을 쳐줌 (interval은 안넣어도 되지만 혹시 모를 문제를 대비하여 넣어준다)
hotkey('ctrl','c') Ctrl + C (복사 기능) , Ctrl + V (붙여넣기 기능)

 

time (시간을 다루는 모듈)
sleep(숫자) 숫자 1당 1초 만큼 쉰다
(0<x) 의 모든 실수는 다 적용가능하다
여기서 sleep을 배우는 이유는 delay타임을 부여해 시스템의 안정성을 높이기 위해 사용한다.

추가로 필요하면 keyboard, mouse 기능도 추가하면 다양한 기능을 사용할 수 있습니다.

 

파이썬의 각각 모듈은 아래와 같은 방식으로의 설치가 필요합니다 (cmd)

>>  pip install pyautogui

방법

1. 마우스 매크로 (x축, y축)

# 마우스 x,y 축을 알아내는 방법

import pyautogui
import keyboard
import time

while 1:
    position = pyautogui.position()
    if keyboard.is_pressed('enter'):
        print(position)
        time.sleep(0.2)

# 해당 소스코드는 왼쪽클릭을 하는경우 좌표가 출력되는 방식이다
# pyautogui의 단점은 입력에 관한 함수가 없기 때문에 enter키를 누르면 나오게 설정하였다

여기서 pyautogui의 단점이 나온다. keyboard, mouse 모듈은 입력과 출력이 가능하지만 해당 모듈은 출력만 가능한 모듈이다. 하지만 일반적인 매크로의 상황은 입력의 상황이 필요하지 않으니 상관없다. 

#마우스 매크로를 제작하여보자

import pyautogui
import time

while 1:
    pyautogui.click(x=600,y=400)
    time.sleep(0.1)
    pyautogui.doubleClick(x=650,y=450)
    time.sleep(0.1)

#(600,400)을 클릭 (650,450)을 더블클릭하여 무한실행하는 프로그램
#실제로 이렇게 빨리 실행을 한다면 나가게 해주는 장치도 필요

더블클릭하여 해당 프로그램을 실행시킨다. 만약에 딜레이 타임이 짧을 경우 실제 프로그램 종료 등에 고통을 받을 수 있으니 나갈 수 있는 방법을 구현하는 것이 필요하다.

 

2. 키보드 매크로

#1분마다 f5버튼 누르기

import pyautogui
import time

while 1: #무한실행
    pyautogui.press('f5')
    print('Do it') #됫는지 체크하기 위하여 넣었다
    time.sleep(60) #60초 = 1분

일정 시간마다 f5를 누르는 매크로 프로그램

 

3. 응용

#정지기능 추가
import pyautogui
import keyboard
import time

while 1:
    pyautogui.press('f5', interval=3)
    print('Do it')
    
    pyautogui.click(x=600,y=400, interval=0.1)
    pyautogui.click(x=700,y=300, interval=0.1)
    pyautogui.click(x=800,y=500, interval=0.1)

    if keyboard.is_pressed('f12'):
        break
    # 루프문 탈출
    # f5후 해당위치 3곳을 클릭한다.

time.sleep함수를 사용하지 않고 예제 프로그램을 구성하였다. interval 하고 time.sleep은 자신이 편하다고 생각하는 대로 사용하면 된다. (ㅇㅇ);;

 

마치며

일반적인 모바일 게임이나 간단한 게임 등에서는 매크로 프로그램에서는 매크로를 이용하여 손에 쥐지 않고 할 수 있습니다. 하지만 대다수의 온라인 게임 등에서는 이러한 방법의 매크로 만으로는 부족합니다. 해당 게임에 자체적으로 소프트키 방지를 이용하는 경우가 많습니다. 일반적으로 아두이노 등을 이용하여 물리적인 버튼을 사용하면 가능하다고 이야기는 들었는데 아직 해본 적이 없어서 추후에 해보겠습니다.