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


Autohotkey 를 사용하여 날짜를 계산하는 경우 이라는 함수 사용 합니다.

메뉴얼은 아래 주소 있으니 보시면 되겠고~

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

FormatTime 의 형식은 아래와 같은데~ 대괄호로 묶인 부분은 옵션입니다. 즉, 기본적으로 사용할 때는 안 넣어도 된다는 것입니다.

FormatTime, OutputVar [ , YYYYMMDDHH24MISS, Format]

  • OutputVar 은 FormatTime 의 출력값이고
  • YYYYMMDDHH24MISS 은 입력값입니다.  옵션이므로 안 나오는 경우  현재 컴퓨터에 시간이 설정이 되게 됩니다.  특정 시간을 놓고 싶을때 설정하는 것입니다.
  • Format 은 말 그대로  날짜의 표시형식을  의미합니다.  특정한 형태로 날짜를 표시 하고 싶을 때 사용합니다.

원래 코딩 이라는게  예제를 보면 쉽기 때문에~ 저는 간단하게 예제를 좀 들어 보겠습니다.

일단 가장 단순하게 오늘 날짜로 알아보겠습니다.

아래  코드를 실행해 보시면~

FormatTime, currentDate

msgbox % currentDate

이렇게 현재의 년월일시 요일이 나오는 것을 확인할 수 있습니다.


아래는  날짜의 형식을 바꾸는 예제입니다.

FormatTime, currentDate,, yyyy/MM/dd    ; / 를 구분자로

msgbox % currentDate

FormatTime, currentDate,, yyyy-MM-dd    ; - 를 구분자로

msgbox % currentDate

FormatTime, currentDate,, yyyy.MM.dd   ; . 을 구분자로

msgbox % currentDate

위 코드를 실행해 보면 다음과 같이 결과를 확인할 수 있습니다.


다음으로 날짜를 계산하는 방법에 대해서 간단하게 소개해 보려 합니다.

아래는 오늘로부터 30일 이후의 날짜가 어떻게 되는지를 확인하는 코드입니다.

FormatTime, currentDate,,yyyyMMdd

msgbox % currentDate

currentDate  += 30, days   ; + 30 일

FormatTime, currentDateAfter30,%currentDate%,yyyyMMdd

msgbox % currentDateAfter30

위 코드를 실행해 보면  다음과 같이 오늘 날짜가 나온 후에~

오늘로부터 30일 이후의 날짜가 나오게 됩니다. 오늘은 2018년 03월 24일 인데~ 30일 이후는 4월 23일 이라는 것을 확인할 수 있습니다.


아래와 같은 포스팅도  참조해 보시기 바랍니다.

http://iamaman.tistory.com/1359


+ Recent posts