본문 바로가기
programming language/Autohotkey

Autohotkey 비활성 창에 메시지 보내기 ControlSend, ControlSendRaw

by __observer__ 2018. 6. 2.
반응형

Autohotkey 를 사용하여 특정 프로그램에 명령어를 날릴 때 send 명령어를 주로 사용 하곤 합니다. 그런데 send 명령어는 activation 된 창에만 명령어를 날립니다. 이렇게 되는 경우 send 명령어를 사용하는 중에는 사용자가 다른 작업을 할 수가 없습니다. 이러한 경우에 비활성창에 명령어를 실행 시키는 ControlSend 를 사용하면 다른 작업을 하면서 Autohotkey 를 사용하여 특정 프로그램을 자동 할 수 있습니다.

ControlSend 명령어에 대한 설명은 아래 주소의 메뉴얼을 확인하시기 바랍니다.

https://autohotkey.com/docs/commands/ControlSend.htm

저는 Synology NAS 를 사용하고 있고, Windows 운영체제에서 Synology NAS 에 접속하는 경우 putty 를 사용하는데 아래와 같은 Autohotkey 스크립트를 주로 사용하고 있습니다.

SetTitleMatchMode, 2

SetKeyDelay,-1,-1

ControlSend,,./mod_files.sh,PuTTY,

위 Autohotkey 코드는 PuTTY 에 ./mod_files.sh 를 타이핑 하도록 하는 명령어 입니다. 언뜻 봐서는 문제가 없어 보였는데 계속해서 실행시키다 보니 아래와 같은 문제가 있었습니다. 아래 그림에서 밑줄 친 부분을 보면 명령어가 다른 것을 확인할 수 있습니다. 결국엔 위 코드에서 ControlSend 명령어가 정확하게 동작하지 않는것을 알 수가 있습니다.

위 문제를 확인한 후에~ 내가 ControlSend 명령어를 잘못 썼나? 라는 생각을 했었는데 사실 문제는 SetKeyDelay 에 있었습니다. SetKeyDelay 명령어에서 -1 은 no delay 를 의미하고 첫 번째, 두 번째 아규먼트는 Delay, PressDuration 을 의미 합니다. 이 부분을 no delay 로 설정 하다 보니 문제가 발생한 것이었습니다. 그래서 해당 부분을 지우고 코드를 실행해 봤습니다.

SetTitleMatchMode, 2

ControlSend,,./mod_files.sh,PuTTY,

여러번 실행을 해 봤는데 한 번도 빠짐없이 명령어가 전달 되더군요.

ControlSend 를 사용하는 중에 혹시나 문제가 발생한다면 SetKeyDelay 를 의심 해 보시기 바랍니다.



반응형

댓글