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


ABAP, ActionScript, Ada, ADSO/IDSM, AMPLE, ant, Apex Trigger, Arduino Sketch, ASP, ASP.NET, Assembly, autohotkey, awk, blank, Bourne Again Shell, Bourne Shell, C, C shell, c#, C++, C/C++ Header, C:\Windows, CCS, choco, chocolatey, cloc, cloc-1.62.exe, cloc-1.62.pl, cloc.exe, Clojure, ClojureScript, cmake, COBOL, CODE, CoffeeScript, coldfusion, ColdFusion CFScript, COMMENT, css, CUDA, cython, d, Dal, dart, DOS Batch, dtd, ECPP, erlang, expect, F#, focus, fortran 77, Fortran 90, fortran 95, Go, Grails, Groovy, Haml, Handlebars, harbour, Haskell, HLSL, HTML, IDL, install, InstallShield, Java, javascript, JavaServer Faces, JCL, JSON, jsp, kermit, Korn Shell, Kotlin, less, LEX, LISP, Lisp/OpenCL, LiveLink OScript, LUA, M4, make, matlab, maven, Modula3, MSBuild script, mumps, Mustache, MXML, NAnt script, NASTRAN DMAP, Objective C, Objective C++, Ocaml, Oracle Forms, oracle reports, pascal, Pascal/Puppet, Path, Patran Command Language, perl, php, PHP/Pascal, Pig Latin, PL/I, PowerShell, python, QML, r, Racket, Razor, Rexx, RobotFramework, ruby, Ruby HTML, rust, SASS, Scala, sed, Skill, SKILL++, SMARTY, Softbridge Basic, sourceforge, SQL, SQL Data, SQL Stored Procedure, strip-comments, Swift, Tcl/Tk, Teamcenter met, Teamcenter mth, TypeScript, Unity-Prefab, Vala, Vala Header, Velocity Template Language, Verilog-SystemVerilog, VHDL, vim script, Visual Basic, Visualforce Component, Visualforce Page, Windows Message File, Windows Module Definition, Windows Resource File, WiX include, WiX source, WiX string localization, XAML, xBase, xBase Header, xml, xquery, xsd, XSLT, yacc, YAML, 라인수, 코드

이전 포스팅에서 powershell 을 사용한 코드 라인수 세기 방식에 대해 소개한 적이 있는데요~

 

http://iamaman.tistory.com/1577

 

검색을 해보니 역시나…… cloc 라는 프로그램이 있더군요.

 

cloc 의 홈 페이지는 아래와 같습니다.

 

http://cloc.sourceforge.net/

 

또는 이전에 소개했던 Chocolatey 을 사용하여 아래와 같이 설치 할 수 도 있더군요.

 

choco install cloc

 

다운로드 주소는 아래와 같습니다.

 

http://sourceforge.net/projects/cloc/files/cloc/


현재 최신 버전은 1.62 입니다.

 

 

현재 저는 윈도우 64비트를 사용 중이라 위 그림과 같은 페이지에서 cloc-1.62.exe 을 다운로드 받았습니다.


Perl 에 관심이 있는 분들은 cloc-1.62.pl 파일을 다운로드 받아서 소스를 살펴보는 것도 좋은 공부가 될 듯 하네요.

 

다운로드 받은 cloc-1.62.exe 파일을 cloc.exe 라는 이름의 심볼릭 링크로 해서 C:\Windows 와 같이 path 로 설정된 폴더에 넣거나 cloc.exe 로 파일명을 변경 한 후에 path 로 설정된 폴더에 넣습니다.

 

사용법은 굉장히 간단한데요~

 

CMD 창을 연 다음 아래 그림과 같이 cloc 파일명을 넣어 주고 엔터를 때리면~ 각 확장자 별로 code, blank, comment 줄 수 별로 카운트를 해서 목록으로 알려 줍니다.

 

 

위에 그림은 C++ 파일과 헤더 파일 MATLAB 파일의 Code, Blank, Comment 줄 수를 나타내 주는 것을 확인 할 수 있습니다. cloc 는 아래 주소에서 확인 할 수 있는 바와 같이 정말 다양한 언어에 대해 줄 수를 파악해 줍니다.

 

http://cloc.sourceforge.net/#Languages

 

ABAP, ActionScript, Ada, ADSO/IDSM, AMPLE, Ant, Apex Trigger, Arduino Sketch, ASP, ASP.Net, Assembly, AutoHotkey, awk, Bourne Again Shell, Bourne Shell, C, C Shell, C#, C++, C/C++ Header, CCS, Clojure, ClojureScript, CMake, COBOL, CoffeeScript, ColdFusion, ColdFusion CFScript, CSS, CUDA, Cython, D, DAL, Dart, DOS Batch, DTD, ECPP, Erlang, Expect, F#, Focus, Fortran 77, Fortran 90, Fortran 95, Go, Grails, Groovy, Haml, Handlebars, Harbour, Haskell, HLSL, HTML, IDL, InstallShield, Java, Javascript, JavaServer Faces, JCL, JSON, JSP, Kermit, Korn Shell, Kotlin, LESS, lex, Lisp, Lisp/OpenCL, LiveLink OScript, Lua, m4, make, MATLAB, Maven, Modula3, MSBuild script, MUMPS, Mustache, MXML, NAnt script, NASTRAN DMAP, Objective C, Objective C++, OCaml, Oracle Forms, Oracle Reports, Pascal, Pascal/Puppet, Patran Command Language, Perl, PHP, PHP/Pascal, Pig Latin, PL/I, PowerShell, Python, QML, R, Racket, Razor, Rexx, RobotFramework, Ruby, Ruby HTML, Rust, SASS, Scala, sed, SKILL, SKILL++, Smarty, Softbridge Basic, SQL, SQL Data, SQL Stored Procedure, Swift, Tcl/Tk, Teamcenter met, Teamcenter mth, TypeScript, Unity-Prefab, Vala, Vala Header, Velocity Template Language, Verilog-SystemVerilog, VHDL, vim script, Visual Basic, Visualforce Component, Visualforce Page, Windows Message File, Windows Module Definition, Windows Resource File, WiX include, WiX source, WiX string localization, XAML, xBase, xBase Header, XML, XQuery, XSD, XSLT, yacc, YAML

 

--strip-comments 같은 옵션을 사용하면 comment 을 지울 수도 있더군요. 외부에 코드를 보낼 때 종종 활용하게 될 것 같네요.


+ Recent posts