실행 코드
sdemon -o status -i 1234 -s 12.34.56.78
위와 같은 커맨드를 실행하기 위한 코드를 작성한다.
option := "%ComSpec% /c " command = %option% sdemon -o status -i 1234 -s 12.34.56.78 objShell := ComObjCreate("WScript.Shell") objExec := objShell.Exec(command)
위와 같은 코드로 해당 명령을 실행할 수 있다.
ComSpec
C:\Users>set comspec ComSpec=C:\Windows\system32\cmd.exe
커맨트 창에서 위와 같이 실행하면 %COMSPEC%의 경로를 확인할 수 있다.
ComSpec 옵션
http://www.robvanderwoude.com/command.php 에서 확인 가능하다.
- /c : 실행 후 창을 닫는다.
- /k : 실행 후 창을 유지한다.
/c 옵션을 주어도 반복 실행시에는 커맨드 창이 계속해서 생성되었다가 사라지는 현상이 발생한다.
이를 방지하기 위하여 아래 코드를 실행한다.
;If you add this to the auto-execute section (top) of your script, the window will flash only once instead of every time you call GetDFHack(): DllCall("AllocConsole") WinHide % "ahk_id " DllCall("GetConsoleWindow", "ptr")
텍스트 파일 읽기
IP와 PORT값을 텍스트 파일로 읽어보자.
텍스트 파일은 CSV 형식으로 아이피,포트,설명
형식으로 생성하였다.
textFile := % A_ScriptDir . "\sdelist.txt" ; 텍스트 파일 경로 Loop, read, %textFile% ; 루프로 파일 읽기 { Loop, parse, A_LoopReadLine, `, ; , (컴마)로 구분해서 읽어오기 { if (A_Index = 1) { ; csv로 정의한 순서대로 읽어오기 ip = %A_LoopField% ; 1. IP } else if (A_Index = 2) { ; 2. PORT port = %A_LoopField% } else if (A_Index = 3) { ; 3. description desc = %A_LoopField% } } ; run command execution }
위의 코드를 실행하면 각각의 정보는 변수 ip, port, desc 에 담겨진다. 이를 활용하여 커맨드를 생성하면 된다.
Cmd 실행 결과 읽기
option := "%ComSpec% /c " command = %option% sdemon -o status -i %port% -s %ip% objShell := ComObjCreate("WScript.Shell") objExec := objShell.Exec(command) strStdOut := "" ; 하나의 변수에 모두 담는다. while, !objExec.StdOut.AtEndOfStream { strStdOut .= objExec.StdOut.ReadLine() Sleep, 100 }
위의 코드를 실행하면 커맨드 실행 결과를 strStdOut 변수에 모두 담을 수 있다.
정규 표현식 읽기
strStdOut에 담겨진 텍스트 중에서 원하는 값을 찾는다.
FoundPos := RegExMatch(strStdOut, "Active Server Processes:\s+(?P<Process>\d+)", varRegExResult) if (FoundPos != 0){ MsgBox %varRegExResultProcess% }
여기서 유의해야 할 것은 변수명이다.
코드 RegExMatch(A,B(그룹명C),D); 일 경우에 아래와 같다.
A:문자열이 담겨진 변수 B:찾을 정규표현식 (안에 그룹명으로 C를 사용) D:받을 변수명
위와 같이 명령어를 실해하면 결과 변수명으로 DC
를 얻게 된다.
엑셀 파일 저장
파일 열기
excelFile := % A_ScriptDir . "\result.xlsx" ; 엑셀 파일 경로 if (FileExist(excelFile) != "A"){ ; 파일 상태 확인 MsgBox, "Not Accessible Excel result File" return } Xl := ComObjCreate("Excel.Application") ;create handle excel := Xl.Workbooks.Open(excelFile)
파일 읽기, 쓰기
colIdx := Xl.Range("A" . 1).Value ; Starting Column Position colIdx := Floor(colIdx) + 1 ; make float to int Xl.Range("A" . 1).Value := colIdx
엑셀의 컬럼, 로우 값의 Value를 통하여 해당 데이터를 읽거나 쓸 수 있다.
엑셀에서 데이터 입력시에, 컬럼을 숫자로 사용하지 않고 알파벳으로 사용한다. 따라서 순차적으로 증가하는 코드를 작성할 경우에 알파벳으로 변환해 주는 코드가 필요하다.
ExcelColumnName(colIdx) { chars := ["A", "B", "C", "D", "E", "F" , "G", "H", "I", "J", "K" ,"L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] quotien := colIdx // 26 charIdx := mod(colIdx,26) if (quotien > 0){ return ExcelColumnName(quotien) . chars[charIdx] } else { return % chars[charIdx] } }
위의 함수를 사용하여 인덱스를 엑셀에서 사용하는 알파벳으로 변경한다.
여기에서 사용하지 않지만 참고로 반대로 변환하는 경우에는 아래 함수를 사용한다.
ExcelColumnNumber(colName) { total := 0 number := 0 pow := 1 length := StrLen(colName) Loop, %length% { char := SubStr(colName, length - A_Index + 1, 1) number := % (asc(char) - asc("A") + 1) * pow total += number pow *= 26 } return total }
EXE 파일 생성
Ahk2Exe 를 실행하여 exe로 변경한다.
'Programming > AutoHotKey' 카테고리의 다른 글
[AHK] 두벌식보다 편한 것은...? (1) | 2015.01.08 |
---|---|
[AHK] AutoHotKey 환경변수 (0) | 2014.10.26 |
[AHK] 괄호 자동 완성 (0) | 2013.11.11 |
[AHK] AutohotKey 0x01 미니키보드 만들기 (0) | 2013.09.28 |
[AHK] AutoHotKey 0x00 처음 접하다 (0) | 2013.09.14 |
댓글