본문 바로가기
업무 자동화 매크로

마우스 다운과 마우스 업

by 오토픽 2024. 8. 13.
반응형

안녕하세요. 업무 자동화 RPA 매크로 오토픽입니다.

오늘 알아볼 내용은 마우스 다운과 마우스 업입니다. 이 둘은 항상 쌍으로 실행되기 때문에 같이 설명하는게 좋을듯 합니다.

그리고, 마우스 클릭과 다르게 마우스 다운과 업은 동작이 분리되어 있기 때문에 사용에 있어서 장점도 있고 단점도 존재합니다.

예를 들어서 특정 위치에 클릭을 할 때 마우스 클릭 액션은 다운과 업의 동작이 하나의 액션에 묶여 있기 때문에 동기화가 자동으로 처리됩니다.

하지만, 마우스 다운과 마우스 업은 액션이 분리되어 있어서 마우스 클릭 동작 사이에 다른 동작이 개입할 수 있는 여지가 존재합니다.

이런 경우 마우스 동작이 꼬여서 의도하지 않은 동작을 수행할 수 있습니다.

 

오토픽 매크로에는 마우스 드래그가 별도로 존재하지만, 마우스 다운과 마우스 업으로도 드래그를 구현할 수 있습니다.

그리고, 꾹 누르고 있다가 다른 곳에서 마우스를 때야 하는 시나리오도 존재합니다. 폴더를 이동하는것과 같은 동작입니다.

 

이렇듯 마우스 다운과 마우스 업은 좀 더 다양한 환경에 적응하기 좋은 액션입니다. 하지만, 멀티 다클라 환경에서는 조심해서 사용해야 합니다.

오토픽 매크로는 기본적으로 멀티 다클라 매크로에 최적화되어 있기 때문에 동기적으로 사용할 수 있는 마우스 클릭과 마우스 드래그를 사용하는게 더 좋습니다.

 

여러가지 시나리오를 테스트하기 위해 오토픽 에디터를 실행하세요. 에디터 좌측의 도구 상자에서 마우스 다운 액션을 더블 클릭하여 스크립트에 추가 해주세요.

 

 

 

테스트를 위해 그림판을 하나 실행 해줍니다. 그리고, 이전 마우스 클릭과 마우스 더블 클릭에서 설명한바와 같이 창 활성화를 먼저 해줘야 합니다.

시각적으로 마우스 동작을 확인하기 쉽도록 브러시 크기를 가장 큰걸로 선택하고, 색도 오랜지색으로 변경했습니다.

 

 

 

마우스 업 액션도 추가해주고, 그림판의 위치를 동일하게 설정하세요.

좌표를 설정하는 방법은 마우스 클릭과 동일합니다. 이 전 글인 마우스 더블 클릭과 마우스 클릭을 참고하세요.

마우스 다운과 마우스 업의 좌표를 동일하게 설정 했습니다. 이렇게하면 클릭과 동작이 같습니다.

 

 

 

마우스 다운 액션을 선택하고, 도구 상자에서 프로그램 활성화 액션을 콘트롤키를 누른 상태로 더블 클릭하세요.

그러면, 현재 선택된 액션 위로 추가됩니다.

그냥 더블 클릭하면 선택된 액션 아래로 추가됩니다.

 

 

 

마우스 다운에 실행 전 지연을 300으로 설정하세요. 이렇게 하는 이유는 창이 활성화되기 전 마우스 다운 액션이 실행되면 안되기 때문입니다.

왜 이럴까를 생각해보면 아래와 같이 설명드릴 수 있습니다. 우리는 오토픽을 이용해서 윈도우와 대화를 하는 것입니다.

창을 활성화하라고 말을 했죠? 그리고, 윈도우가 창을 활성화할 때까지 기다리지 않고 바로 다음 명령을 말합니다.

이 때 창을 활성화하고 마우스 다운 명령을 수행하면 좋겠지만, 모든 OS는 동기적으로 일을 하지 않습니다.

OS는 여러가지 일을 받았을 때 빨리 할 수 있는 일을 먼저 처리합니다. 그래야 속도가 올라가니까요.

하지만, 동기적으로 처리해야 하는 일들은 앞의 일이 완료될 때까지 대기하게 되는데요. 이런 경우 윈도우에 행(Hang)이 걸렸다라고 말합니다.

이런 비슷한 문제로는 락(Lock) 또는 병목현상(Bottleneck)이라고 부릅니다. 엄밀히 3가지가 모두 의미적으로 다르지만, 엔드유저가 볼 때는 비슷하기도 합니다.

 

 

 

위에서 순차적으로 실행되는 매크로에서 굳이 지연 시간을 설정해야 하는지를 설명했는데요. 이 부분이 잘 이해가 안갈수도 있습니다.

좀 더 OS 관점에서 아키텍쳐를 자세하게 설명하면 좋겠지만, 상당히 많은 지면을 할당해야 하고 솔직히 비개발자가 다 알필요는 없는 내용입니다.

이런 몇가지 테크닉들은 그냥 외워서 사용하는게 가장 좋습니다.

 

그림판을 활성화하기 위해 오른쪽 프로그램 활성화의 속성창을 보세요.

프로그램 선택을 클릭하면 [⋯] 버튼이 오른쪽에 표시됩니다. 이 버튼을 클릭하고 마우스를 그림판으로 가져간 후 F1을 누르세요.

그러면, 그림판이 선택되는걸 확인할 수 있습니다.

 

 

 

이제 매크로를 실행하고 결과를 확인 해볼까요?

그림판의 좌표 설정한 곳에 오랜지색 점이 찍힌걸 확인할 수 있습니다.

 

 

 

마우스 다운의 좌표는 483, 384로 설정되어 있고 마우스 업의 좌표는 250, 453 입니다.

X, Y 좌표계를 보면 알겠지만 이 매크로를 실행하면 그림판의 중앙쯤 마우스가 다운되고 그림판의 좌측 하단쪽에 마우스가 업 됩니다.

 

 

 

이렇게 설정하고 매크로를 실행하면 마치 마우스 드래그를 한것처럼 동작합니다.

 

 

 

아직 설명하지 않은 속성들이 많은데요. 앞서도 말했듯이 마우스 클릭과 마우스 드래그와는 다르게 마우스 다운과 마우스 업은 동기화되지 않음으로 해서 여러가지 문제가 발생합니다.

물론, 스크립트를 치밀하게 잘 만든다면 아무런 문제도 발생하지 않을겁니다. 하지만, 20년 넘게 개발만 한 저도 모든 경우의 수를 예상하고 대처하지 못합니다.

간단한 매크로 스크립트를 만드는 여러분들도 예상하지 못한 어떤 문제가 발생할 수 있는데요.

이런 문제중에 하나가 멀티 다클라 환경 또는 마우스가 다운된 상태에서 업이 되기 전 사용자가 매크로를 중지하는 것입니다.

마우스 다운 후 마우스 업이 되기 전 매크로를 중지시키면 윈도우는 마우스가 다운된 상태로 남게 됩니다.

 

윈도우의 API를 사용하는 소프트웨어 신호는 큰 문제가 되지 않습니다. 하지만, 하드웨어 방식의 멀티 다클라를 만드는 경우에 문제가 됩니다.

소프트웨어 신호는 단발성입니다. 예를 들어서 키보드의 A를 누르고 있으면 소프트웨어는 A 한번 입력되지만, 하드웨어 방식은 AAAAA... 연속해서 입력됩니다.

마우스도 동일합니다. 마우스 업 신호를 줄 때까지 릴리즈가 되지 않습니다.

※ 아두이노의 경우 컴퓨터에서 아두이노를 분리하면 입력 신호가 끊기게 됩니다.

 

그래서, 마우스 다운과 키보드 업은 릴리즈 옵션이 존재합니다.

5초후에도 마우스 업 입력이 없다면 자동으로 마우스 업을 실행하고, 윈도우의 마우스 다운을 릴리즈 시켜줍니다.

참고로, 마우스 다운 상태가 아니라면 릴리즈 명령은 무시됩니다.

다시말해서 마우스 다운에 5초 후 릴리즈를 걸어두었더라도 1초 후 정상적으로 마우스 업 액션이 실행되었다면 자동 릴리즈 명령은 무시되고 실행하지 않습니다.

 

 

 

글로 설명하는데는 한계가 존재합니다. 여러가지 다양한 상황을 테스트해보고 결과를 확인하는게 가장 좋은 방법니다.

위와 동일한 내용이지만, 테스트 내용과 동작을 쉽게 확인하려면 아래 동영상을 참고하세요.

감사합니다.

 

https://youtu.be/TfY5fUMCjhU

 

반응형

'업무 자동화 매크로' 카테고리의 다른 글

마우스 정보  (0) 2024.08.13
마우스 휠 매크로  (0) 2024.08.13
마우스 드래그  (0) 2024.08.13
엑셀 매크로 하위폴더  (0) 2022.06.24
녹화 매크로 (활성, 비활성, 하드웨어 & 기계식)  (0) 2022.06.24