반응형
안녕하세요. 엔지엠소프트웨어입니다.
엔지엠 에디터 6.2.1.1 버전부터 마우스·키보드·시간 관련 다양한 이벤트 액션이 추가되었습니다.
이벤트를 활용하면 원하는 타이밍에 스크립트를 정확히 실행할 수 있어 자동화의 가능성이 크게 넓어집니다.
하지만 한 번 등록한 이벤트는 계속 동작(감지)하기 때문에 의도치 않은 중복 호출(버블링) 문제가 발생할 수 있습니다.
이번 글에서는 그 원인과 실무에서 안전하게 쓰는 방법을 단계별로 설명드립니다.
문제 상황(요약)
- 예: 마우스 왼쪽 다운 이벤트를 등록해 두고, 이벤트가 트리거되면 이동한 위치에서 마우스 클릭 액션을 수행한다면?
- 클릭 액션 자체가 또다시 마우스 다운 이벤트를 발생시켜 이벤트가 중복 실행됩니다.
- 마우스 down ↔ up이 한 쌍으로 동작하는데, 너무 빠르게 처리되면 이벤트 감지 타이밍과 겹쳐서 더블클릭 현상도 발생합니다.

해결 전략 — 기본 원칙
- 이벤트를 삭제(Delete) → 필요한 작업 수행 → 이벤트를 다시 등록(Register)
개발자들이 이벤트 중복(버블링)을 막기 위해 흔히 쓰는 패턴입니다. - 가능하면 클릭(Click) 대신 이동(Move) 을 사용해 이벤트 트리거 조건을 피합니다.
- 이벤트 삭제는 특정 ID만 삭제하도록 하거나(권장), 모든 이벤트 삭제 시에는 반드시 초기 상태로 복구(재등록) 합니다.

권장 스크립트 흐름(실전 패턴)
아래는 실무에서 안전하게 쓰는 패턴 예시(의사 코드)입니다.
- 초기(시작) :
- RegisterEvent(id="evt_left", type=MouseLeftDown, target=루틴B)
- RegisterEvent(id="evt_right", type=MouseRightDown, target=루틴C)
- 메인 루틴(루틴A) : 계속 동작(예: 작업 루프)
- 이벤트 루틴(루틴B, 루틴C) 흐름(루틴B 예) :
- DeleteEvent("evt_left") ← 중요: 먼저 자신이 트리거한 이벤트를 삭제
- DeleteEvent("evt_right") ← 필요한 경우 다른 관련 이벤트도 삭제(또는 delete all)
- 실제 작업 수행
- 클릭을 꼭 써야 하면 여기서 클릭 (또는 연타) 수행
- 또는 클릭 대신 Move 사용(가능한 경우)
- 클릭 연타 등은 내부에서 처리 (딜레이를 적절히 줌)
- 작업 완료 후 이벤트 재등록
- RegisterEvent("evt_left", ...)
- RegisterEvent("evt_right", ...)
- 루틴 종료 → 메인 루틴 복귀
포인트: 이벤트를 삭제하면 두번째부터는 해당 이벤트가 더 이상 실행되지 않으므로 작업이 끝난 직후 반드시 원상복구해야 합니다.

실무 팁 & 주의사항
- 타겟 삭제 권장: 모든 이벤트를 삭제(delete all)하면 편하나, 나중에 재등록할 때 누락하면 해당 이벤트는 영구 비활성화됩니다. 가능하면 아이디로 타겟 삭제하세요.
- 재등록 시 이벤트 수/아이디 동일하게: 처음엔 2개 등록했는데 재등록을 1개만 하면 나머지 이벤트는 동작하지 않습니다. 항상 원래 상태와 동일하게 복원하세요.
- 클릭 속도(딜레이): 너무 빠른 down/up은 이벤트와 충돌합니다. 클릭이 필요하면 down → wait(짧게) → up 과 같이 적절한 지연을 넣어주세요.
- Move로 대체 가능한지 검토: 이동만으로 충분하면 클릭(물리 이벤트)을 발생시키지 않아서 문제 자체가 없어집니다.
- 이벤트 ID 규칙: 유니크하고 직관적인 ID(예: evt_mouse_left_main, evt_mouse_right_menu)를 사용하면 관리가 편합니다.
- 로깅: 이벤트 삭제/등록 시 로그를 남겨두면 디버깅에 큰 도움이 됩니다.

자주 발생하는 실수 사례
- 이벤트를 삭제한 뒤 재등록을 잊어버림 → 특정 클릭이 더 이상 동작하지 않음
- 재등록을 한 개만 해버림 → 다른 이벤트(우클릭 등)는 동작 멈춤
- 클릭을 사용하면서 딜레이 없이 처리 → 더블클릭/중복 이벤트 발생
마무리
이벤트는 강력한 도구지만, **'계속 감지한다'**는 특성 때문에 설계가 조금 더 까다롭습니다.
안전한 패턴은 삭제 → 작업 → 재등록이며, 가능하면 클릭 대신 이동으로 물리적 이벤트를 발생시키지 않는 쪽이 더 안정적입니다.
첨부하신 샘플 스크립트(원본/수정본)를 기반으로 직접 예제 파일(.nms 등)로 정리해드릴 수도 있으니, 원하시면 보내주세요.
✅ 추천 태그
#엔지엠소프트웨어 #오토픽 #AutoPeak #RPA #매크로 #이벤트매크로 #마우스이벤트 #버블링방지
반응형
'업무 자동화 매크로' 카테고리의 다른 글
| 아웃룩 연동으로 메일 자동 발송하기 (0) | 2025.09.17 |
|---|---|
| 아웃룩 받은 메일 자동 포워딩 매크로 활용법 (0) | 2025.09.16 |
| 네이버 카페 매니저 아이디 추출하기 (엔지엠 RPA 매크로 활용법) (0) | 2025.09.16 |
| 엔지엠 RPA 매크로와 크롬 Headless 모드 자동화 활용법 (2) | 2025.09.15 |
| 엔지엠 RPA 매크로로 배우는 비활성 마우스 클릭 구현 방법 (2) | 2025.09.15 |