MiniMacro 1
이 글은 MiniMacro 시리즈의 2번째 기록입니다. (총 5개)
오늘 한 일
- 마우스·키보드 반복 작업 자동화 미니 툴 MiniMacro를 만듦 — 클릭·이동·키·텍스트·대기 단계를 목록으로 편집하고, 실제 조작을 녹화해 단계로 변환하고, 반복 횟수를 정해 재생 (Python + tkinter — 파이썬에 기본 포함된 GUI 툴킷)
- 이유: 단순 반복 작업에 손이 매번 묶여서
- 작업과 작업 사이 시간 조절 — 대기 단계, 반복 사이 대기, 시작 전 대기(대상 창으로 전환할 3초)
- hover 메뉴 대응 — 클릭을 “이동 + 클릭” 두 단계로 나눠 녹화하고, 커서는 좌표로 순간이동
- 재생 시작점 선택 — 처음부터 또는 목록에서 선택한 단계부터
- 안전장치 — ESC·화면 왼쪽 위 모서리로 비상 정지, 시나리오 JSON 저장/불러오기
- 듀얼 모니터에서 재생 위치가 어긋나는 문제 해결
- GitHub 저장소에 올리고 CLAUDE.md 작업 원칙 정비
막힌 부분
- hover하면 열리는 메뉴를 클릭 좌표만으로는 재현하지 못함
- 해결: 클릭 없이 커서만 옮기는 이동 단계를 만들고, 녹화도 클릭을 “이동 + 클릭”으로 분리 생성. hover 메뉴는 “이동 → 대기(메뉴 열릴 시간) → 클릭”으로 구성
- 커서가 경로를 따라 움직이면 도중에 다른 요소를 지나며 hover 메뉴가 닫힘
- 해결: 이동을 좌표 순간이동으로 바꿈. 순간이동해도 도착 지점의 hover 이벤트는 정상 발생
- 한글 텍스트가 입력되지 않음
- 원인: 키 입력 라이브러리가 ASCII만 지원
- 해결: 클립보드에 복사한 뒤 붙여넣기(ctrl+v)로 우회
듀얼 모니터에서 녹화한 위치와 다른 곳을 클릭했다
녹화된 좌표 값은 그대로인데 재생만 어긋났다 — 녹화(전역 후킹)는 항상 물리 픽셀 좌표를 주므로, 문제는 재생 쪽 좌표 해석이었다. 원인은 두 겹이었다. 하나는 pyautogui가 마우스 좌표를 주 모니터 범위로 잘라서 보조 모니터 클릭이 가장자리로 밀리는 것. 다른 하나는 프로세스의 DPI 인식이 최초 한 번만 설정되는데, pyautogui가 import 시점에 낮은 수준(시스템)으로 먼저 설정해 버려서 뒤에 넣은 모니터별(Per-Monitor V2) 설정이 조용히 실패한 것 — 모니터마다 배율이 다르면 그만큼 좌표가 어긋난다.
_set_dpi_awareness() # 반드시 pyautogui import보다 먼저
import pyautogui # noqa: E402
- 해결: 마우스 이동·클릭 실행을 녹화와 같은 물리 픽셀 좌표계를 쓰는 pynput으로 바꾸고, Per-Monitor V2 DPI 설정을 pyautogui import 앞으로 옮김. 실제 DPI 인식 수준이 1(시스템)에서 2(모니터별)로 올라간 것을 확인
다음에 할 일
- 실제 반복 작업에 써 보고 스크롤·드래그 단계가 필요한지 확인