본문 바로가기
programming language/Autohotkey

Autohotkey control 활성 유무 확인하기 ControlGet

by __observer__ 2018. 10. 4.
반응형

Autohotkey 를 사용하여 윈도우를 자동화하는 경우 다양한 사례들에 부딪히게 되는데~ 오늘은 제가 최근에 겪은 사례와 그 해결 방법에 대해서 소개를 해 보렵니다.

저는 PC에서 카카오톡 PC 버전을 사용하고 있습니다. 로그인 설정에 따라서 다르겠지만 저는 카카오톡 PC 버전에 “잠금 모드로 로그인 설정”을 해 놔서~ 실행되면 아래의 그림들과 같이 잠금 모드로 실행되고 로그인 비밀번호를 입력해 줘야 PC 에서 카카오톡을 사용할 수 있습니다.

그러다 보니 매번 비밀번호를 입력하는 것이 귀찮아서 Autohotkey 를 사용하여 카카오톡 로그인 자동화를 만들어 보고 싶었습니다. 그런데 만들다 보니 카카오톡 비밀번호를 넣기 위해서는 비밀번호를 넣는 Edit3 control 이 활성화 될 때까지 기다려야 했습니다. 물론 조금 단순하게 그냥 sleep 을 오래줘서 기다리게 하는 방법도 있겠지만 Edit3 control 의 유무를 체크하게 하는 방법을 사용하고 싶었습니다.

그래서 Autohotkey 로 특정창의 특정 control 유무를 체크하는 방법을 알아보니 ControlGet 이라는 명령어가 있었습니다. ControlGet 의 메뉴얼은 아래 주소에서 확인할 수 있습니다.

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

아래는 카카오톡 창에서 패스워드를 입력하는 Edit3 컨트롤이 사용 가능한지를 확인하는 코드 입니다.

ControlGet, OutputVar, Enabled, , Edit3, 카카오톡 ahk_exe KakaoTalk.exe

Msgbox % OutputVar

매뉴얼을 보시면 아시겠지만 위 코드에서 Enabled 부분이 SubCommand 인데 처음에는 Edit3 가 보이는지 안 보이는지를 체크 하려고 Visible SubCommand 를 사용 했습니다.

그런데 아래와 같이 사용자 눈에는 보이지만 초기에는 Visible 이 0 이고~

Edit3에 커서가 Focus 되서 뭔가 하나라도 입력이 되어 있는 경우에만 Visible 이 1 로 표시된다는 걸 알 수 있었습니다.

따라서 Edit3 컨트롤이 사용가능한지 아닌지를 판단하기 위해서는 Enabled SubCommand 를 사용하는게 맞는 것으로 보였습니다.

결론적으로 Edit3 컨트롤이 입력 가능 할 때까지 기다렸다가 암호를 입력하고 Enter 를 쳐서 로그인하는 코드는 아래와 같습니다. passWordStr 변수의 값을 자신의 PASSWORD 로 변경 후 사용해 보시기 바랍니다.

passWordStr:="PASSWORD"

Loop

{

ControlGet, OutputVar, Enabled, , Edit3, 카카오톡 ahk_exe KakaoTalk.exe

if OutputVar = 1

break

Sleep, 333

}

Sleep, 333

ControlSend, Edit3, %passWordStr%{Enter}, 카카오톡 ahk_exe KakaoTalk.exe


반응형

댓글