이 글은 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(모니터별)로 올라간 것을 확인

다음에 할 일

  • 실제 반복 작업에 써 보고 스크롤·드래그 단계가 필요한지 확인

Series: MiniMacro


Suggested Posts