단순히 마우스의 위치나 제품 핸들 값을 통한 크기값을 가져와도 모두 배열 값으로 돌아오게 됩니다.
이러한 배열 값을 효과적으로 사용 하는 방법을 익히면 보다 효율적인 코딩이 가능해 집니다.
오늘 확인할 예제 코드는 다음과 같습니다.
#include <Array.au3>
#include <MsgBoxConstants.au3>
Local $iIndex
Local $aArray[5][2]
For $i = 0 To 4
For $j = 0 To 1
$aArray[$i][$j] = "#" & $i & $j
Next
Next
_ArrayDisplay($aArray, "Array")
; Search col 0
$iIndex = _ArrayBinarySearch($aArray, "#10", 0, 0, 0)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)
; Search col 1
$iIndex = _ArrayBinarySearch($aArray, "#31", 0, 0, 1)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)
먼저 기본적인 배열 구조는 다음과 같습니다.
배열이 표시되는 내용 까지 코드는 다음과 같습니다.
#include <Array.au3>
#include <MsgBoxConstants.au3>
Local $iIndex
Local $aArray[5][2]
For $i = 0 To 4
For $j = 0 To 1
$aArray[$i][$j] = "#" & $i & $j
Next
Next
_ArrayDisplay($aArray, "Array")
프로그램에서 로딩 프로그레스 바로 상태를 표시 해준다면 보다 직관적인 프로그램 구성이 가능해집니다.
10만개의 문서를 자동화 한다고 할때 21231/100000 식으로 표시하면 직관성이 떨어지고 만약 100 만개 이상이 된다면 한눈에 현재 상태를 알기 어렵게 됩니다.
그래서 자동화 구성작업을 할때는 프로그레스 바를 통해 보다 직관적으로 만들어 주시면 좋습니다. 하단은 샘플로 작업 된 것이며 크기나 위치등은 개발자에 따라 변경 가능하므로 상황에 맞게 변형해서 사용해 주면 좋습니다.
먼저 개발에 필요한 재로는 도움말의 예제를 가져 옵니다. 이번에는 ProgressSet 로 검색하여 Example 를 가져온 내용은 아래와 같습니다.
#include <AutoItConstants.au3>
Example()
Func Example()
; Display a progress bar window.
ProgressOn("Progress Meter", "Increments every second", "0%", -1, -1, BitOR($DLG_NOTONTOP, $DLG_MOVEABLE))
; Update the progress value of the progress bar window every second.
For $i = 10 To 100 Step 10
Sleep(1000)
ProgressSet($i, $i & "%")
Next
; Set the "subtext" and "maintext" of the progress bar window.
ProgressSet(100, "Done", "Complete")
Sleep(5000)
; Close the progress window.
ProgressOff()
EndFunc ;==>Example
동작 화면은 다음과 같습니다.
스크립트 구성에 대하여 간단히 이야기 하자면 프로그레스 바를 간단하게 생성해주는 함수 입니다. 자세한 파라미터 설명은 하단에 추가 하였습니다.
ProgressOn("Progress Meter", "Increments every second", "0%", -1, -1, BitOR($DLG_NOTONTOP, $DLG_MOVEABLE))
실제 프로그레스 바 동작을 진행하는 항목입니다. for 반복문을 사용하여 1초 단위로 10씩 올라가도록 설정 되어 있습니다.
For $i = 10 To 100 Step 10
Sleep(1000)
ProgressSet($i, $i & "%")
Next
다른 외부 프로그램을 실행하는 방법알아보려 합니다. 가장 기본적인 명령어는 Run과 RunWait 을 이용하여 실행하는 방법입니다.
먼저 Run 사용 예제 입니다.
Example()
Func Example()
; Run Notepad with the window maximized.
Local $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
; Wait 10 seconds for the Notepad window to appear.
WinWait("[CLASS:Notepad]", "", 10)
; Wait for 2 seconds.
Sleep(2000)
; Close the Notepad process using the PID returned by Run.
ProcessClose($iPID)
EndFunc ;==>Example
Runwait 사용 예제 입니다.
#include <MsgBoxConstants.au3>
Example()
Func Example()
; Run Notepad and wait for the Notepad process to close.
Local $iReturn = RunWait("notepad.exe")
; Display the return code of the Notepad process.
MsgBox($MB_SYSTEMMODAL, "", "The return code from Notepad was: " & $iReturn)
EndFunc ;==>Example
두 가지 방식의 가장 큰 차이는 Run의 경우 실행 후 다음 코드로 넘어가지만 RunWait의 경우 실행 될때 까지 대기하는 차이가 있습니다.
RunWait의 경우 실행을 알아서 기대려 주는 장점이 있지만, 만약 해당 프로그램이 실행되지 않는 경우 무한 대기에 빠질 수 있으므로 상황에 맞게 사용해야 합니다.
두 값 모두 두번째 값은 프로그램 실행 경로 입니다.
그 다음 ShellExecute 와 ShellExecuteWait 입니다. Run / RunWait 와 유사한 사용방식을 제공합니다.
#include <MsgBoxConstants.au3>
Example()
Func Example()
; Retrieve the following text file. This can be found in the include folder which is in the installation path of AutoIt.
Local $sWow64 = ""
If @AutoItX64 Then $sWow64 = "\Wow6432Node"
Local $sFile = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE" & $sWow64 & "\AutoIt v3\AutoIt", "InstallDir") & "\include\_ReadMe_.txt"
; Execute the readme file (.txt) with the default editor used for text files in Windows.
Local $iPID = ShellExecute($sFile)
MsgBox($MB_SYSTEMMODAL, "", "PID: " & $iPID)
EndFunc ;==>Example
#include <MsgBoxConstants.au3>
Example()
Func Example()
; Execute Notepad and wait for the Notepad process to close.
Local $iReturn = ShellExecuteWait("notepad.exe")
; Display the return code of the Notepad process.
MsgBox($MB_SYSTEMMODAL, "", "The return code from Notepad was: " & $iReturn)
EndFunc ;==>Example
ShellExecute 항목의 장점은 사이트도 바로 실행이 가능하다는 점입니다. 하단 처럼 웹 주소를 주면 메인으로 사용하는 브라우저에서 바로 실행 됩니다.
local $Main_Site ="https://smart-west.tistory.com"
ShellExecute($Main_Site)
파일 비교용 장치 입니다. 하단에 첨부 된 압축을 해제 후 실행하면 아래와 같은 화면이 나타납니다.
각 번호별 기능은 다음과 같습니다.
1. 비교를 위한 첫번째 선택 폴더 입니다. - 버튼 선택 시 원하는 폴더를 선택하면 됩니다.
2. 비교를 위한 두번째 선택 폴더 입니다.- 버튼 선택 시 원하는 폴더를 선택하면 됩니다.
3. 2개의 폴더 선택 후 파일 비교를 진행 합니다.
4. 비교 결과를 엑셀에 생성해줍니다. ( 엑셀 정품이 설치되어 있어야 합니다. )
5. Exit 프로그램을 종료 합니다.
3번 Compare 선택 하면 비교 결과가 화면에 나타납니다.
비교로 나타난 화면에는 파일 이름, 파일 용량과 시간이 표시 됩니다.
1번 버튼을 선택하면 클립보드에 해당 데이터가 들어갑니다.
2번 버튼을 선택하면 비교 화면이 종료 됩니다.
동작 화면은 다음과 같습니다.
결과 실행 파일 : -주의사항 :아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다. 인터넷에서 다운 받은 EXE의 경우보안알림이 뜰 확률이매우높습니다. 대부분의 보안알림은 경고성 안내이며 절대적인 문제 사항을 찾아서 알려주는 것은 아닙니다.
#include <MsgBoxConstants.au3>
Local $i = 0
Do
MsgBox($MB_SYSTEMMODAL, "", "The value of $i is: " & $i) ; Display the value of $i.
$i = $i + 1 ; Or $i += 1 can be used as well.
Until $i = 10 ; Increase the value of $i until it equals the value of 10.
여기서 종료가 아닌 반복문만 나가는 법을 추가해 보려 합니다. 조건문은 5보다 $i 가 커지면 반복문이 종료되게 만들기 위해 다음과 같이 추가 합니다.
#include <MsgBoxConstants.au3>
Local $i = 0
Do
MsgBox($MB_SYSTEMMODAL, "", "The value of $i is: " & $i) ; Display the value of $i.
$i = $i + 1 ; Or $i += 1 can be used as well.
If 5 < $i then Exit
Until $i = 10 ; Increase the value of $i until it equals the value of 10.
MsgBox($MB_SYSTEMMODAL, "", "Exit ")
메세지 박스가 5까지 올라간 후 추가 메세지 박스 없이 종료 됩니다. exit는 프로그램 자체가 종료 되므로 그 밖에 있는 추가적인 메세지 박스 표시 동작이 진행되지 못합니다.
이번에는 ExitLoop로 변경해 보려 합니다.
Local $i = 0
Do
MsgBox($MB_SYSTEMMODAL, "", "The value of $i is: " & $i) ; Display the value of $i.
$i = $i + 1 ; Or $i += 1 can be used as well.
If 5 < $i then ExitLoop
Until $i = 10 ; Increase the value of $i until it equals the value of 10.
MsgBox($MB_SYSTEMMODAL, "", "ExitLoop")
1에서 5까지 진행되고 반복문 밖에 있는 메세지 박스가 표시되는 것을 확인 할 수 있습니다.
어느 한 개발자에게 가장 많이 사용하는것 3개만 알려달라하니 For 문과 While 반복문 2개와 If 문 인 조건문 1개라고 답하더군요
어느 프로그래밍 언어를 사용하시던 이 3개를 잘 사용하시면 좋은 코딩이 될 가능성이 높아질 듯 합니다.
먼저 For 문에 대하여 간단하게 알아보겠습니다. 에디터의 도움말을 보시면 2종류의 For 문이 보이는데 첫번째 항목만 확인해 볼 예정입니다.
해당 함수의 사용 예제는 다음과 같습니다.
#include <MsgBoxConstants.au3>
For $i = 5 To 1 Step -1
MsgBox($MB_SYSTEMMODAL, "", "Count down!" & @CRLF & $i)
Next
MsgBox($MB_SYSTEMMODAL, "", "Blast Off!")
예제의 For 문은 역순으로 돌아가는 함수 입니다. 5 부터 1까지 거꾸로 숫자가 동작하는 경우엔 이처럼 사용하면 되지만 일반적인 경우는 앞 뒤 숫자를 변경하고 Step를 제거하면 됩니다.
#include <MsgBoxConstants.au3>
For $i = 1 To 5
MsgBox($MB_SYSTEMMODAL, "", "Count down!" & @CRLF & $i)
Next
MsgBox($MB_SYSTEMMODAL, "", "Blast Off!")
while 함수의 경우 도움말에 2가지 예제가 있습니다.
첫번째 while 의 경우 조건문을 넣어서 특정 조건이 되면 반복문이 종료 되도록 하는 예제 입니다. 이런 조건을 넣는 경우엔 개인적으로 For문을 사용하는 경우가 좀더 많았던 것 같습니다.
#include <MsgBoxConstants.au3>
Local $i = 0
While $i <= 10
MsgBox($MB_SYSTEMMODAL, "", "Value of $i is: " & $i)
$i = $i + 1
WEnd
두번째는 while 1 을 사용해서 특정 조건이 될때까지 계속 유지되는 조건문 입니다. 여기서 밖으로 나가지는 조건만운 hotkeyset을 esc 로 등록하여 해당 키가 나가면 while 문이 종료 되고 종료 되기 전에는 Tooltip를 지속적으로 출력하도록 하였습니다.
; Set the Escape hotkey to terminate the script.
HotKeySet("{ESC}", "_Terminate")
Example()
Func Example()
; Initialize a Local variable.
Local $aMgp = 0
; Create an endless loop, 1 will always be 1 therefore True.
While 1
; Assign a Local variable the coords of the cursor (array).
$aMgp = MouseGetPos()
; Display a tooltip near the cursor with its coords.
ToolTip("x: " & $aMgp[0] & ", y: " & $aMgp[1], $aMgp[0] + 10, $aMgp[1] + 10)
; Avoid high CPU usage.
Sleep(50)
WEnd
EndFunc ;==>Example
Func _Terminate()
Exit
EndFunc ;==>_Terminate
이번에 이용할 함수는 PixelGetColor 함수 입니다. 도움말에서 해당 함수를 찾아서 예제를 구해 옵니다.Autoit 편집기에서 빈 문서를 열고 예제 코드를 붙여 넣은 후 저장해주세요.
#include <MsgBoxConstants.au3>
Local $iColor = PixelGetColor(10, 100)
MsgBox($MB_SYSTEMMODAL, "", "The decimal color is: " & $iColor)
MsgBox($MB_SYSTEMMODAL, "", "The hex color is: " & Hex($iColor, 6))
해당 코드를 동작하면 2번에 걸쳐 메세지 박스가 나타나게 됩니다. 마우스 추적 클릭을 위해서는 처음처럼 구해온 값을 그대로 사용 하셔도 됩니다.
Local $xxx = 210
Local $yyy = 100
Local $iColor = PixelGetColor($xxx, $yyy)
MouseMove($xxx, $yyy)
Local $aCoord = PixelSearch(0, 0, 500, 300, $iColor)
If Not @error Then
MouseMove($aCoord[0] , $aCoord[1])
EndIf
간단한 응용 프로그램을 제작해 봤습니다. x 값과 y 값을 각각 지정하여 특정 위치의 색상 값을 구한 후 구해진 색상의 시작 지점(왼쪽위 기준)으로 마우스를 이동 시키는 코드 입니다.
Finder Tool 항목을 마우스 드래그 하여 해당 위치로 이동 시키면 mouse 의 Color 에서 숫자로 된 색상 값을 구해 올 수 있습니다.
특정 위치의 색을 추적하여 변하는 것을 인식하여 동작하는 툴을 제작하기 위해 쉽게 사용 가능한 함수는 PixelSearch 함수 입니다. 도움말에서 해당 함수를 찾아서 예제를 구해 옵니다.Autoit 편집기에서 빈 문서를 열고 예제 코드를 붙여 넣은 후 저장해주세요.
#include <MsgBoxConstants.au3>
; Find a pure red pixel in the range 0,0-20,300
Local $aCoord = PixelSearch(0, 0, 20, 300, 0xFF0000)
If Not @error Then
MsgBox($MB_SYSTEMMODAL, "", "X and Y are: " & $aCoord[0] & "," & $aCoord[1])
EndIf
; Find a pure red pixel or a red pixel within 10 shades variations of pure red
$aCoord = PixelSearch(0, 0, 20, 300, 0xFF0000, 10)
If Not @error Then
MsgBox($MB_SYSTEMMODAL, "", "X and Y are: " & $aCoord[0] & "," & $aCoord[1])
EndIf
코드 설명을 드리자면 PixelSearch 함수 뒤에 4개의 숫자는 추적 위치를 나타냅니다.
그 뒤에 숫자가 색상 값입니다. Finder Tool 에서 구한 색상 값을 여기 넣으면 됩니다.
현재는 마우스 위치가 메세지 박스로 표시 되지만 이 항목을 마우스 클릭으로 연결하면 해당 위치를 클릭하게 됩니다. ( 하단 스크립트는 메세지 박스를 주석처리하고 마우스 클릭으로 교체 하였습니다. )
Local $aCoord = PixelSearch(0, 0, 20, 300, 0xFF0000)
If Not @error Then
;~ MsgBox($MB_SYSTEMMODAL, "", "X and Y are: " & $aCoord[0] & "," & $aCoord[1])
MouseClick("left" , $aCoord[0] , $aCoord[1])
EndIf
색상 값을 미세하게 클릭하는 경우도 있지만 유사한 색을 추적하여 클릭할 때 사용 할 수도 있습니다. 두번째 예제는 이러한 유사한 값을 추적하여 클릭하는 항목 입니다. 유사한 값의 범위는 색상 값 뒤에 넣으면 됩니다.
만약 While 문과 함께 사용 한다면 특정 범위에서 내가 원하는 색이 나타나면 클릭 후 종료 되도록 사용 가능합니다. 하단 코드는 특정 구역에 찾고자 하는 색이 나타날 때 까지 확인하다가 색이 나타나면 클릭 후 종료되는 스크립트 입니다.
While 1
Local $aCoord = PixelSearch(0, 0, 20, 300, 0xFF0000)
MouseClick("left" , $aCoord[0] , $aCoord[1])
ExitLoop
EndIf
Sleep(1)
WEnd
만약 특정 위치의 화면이 변화가 있는 경우 동작하는 코드를 넣고 싶으시다면 하단 내용을 참고하시면 됩니다.
최대 5개의 동작을 연속해서 해주는 도구 입니다. 단축키를 지정하셔도 되며, 특정 프로그램 실행을 연결 할 수 도 있습니다.
하나의 단축키로 5개를 모두 동작 시킬수도 있으며, 5개 모두 각각 지정하여 사용할 수도 있습니다.
하단 파일의 압축을 해제 하면 3개의 파일이 나타납니다. 이중 ShortKey_Info.ini 파일을 원하시는 방향으로 편집해서 사용 하시면 됩니다. ( 메모장으로 열어서 편집하면 됩니다. )
기본값은 다음과 같습니다.
[Info_1]
ShortKey_Info=Ctrl + q
Run_Info=Ctrl + a
[Info_2]
ShortKey_Info=Ctrl + q
Run_Info=Ctrl + c
[Info_3]
ShortKey_Info=Ctrl + q
Run_Info=Ctrl + v
[Info_4]
ShortKey_Info=Ctrl + q
Run_Info=Ctrl + v
[Info_5]
ShortKey_Info=Ctrl + q
Run_Info=G:\TestCode\test.exe
동작 내용중 ShortKey_Info 값은 단축키를 의미 합니다. 지금은 Ctrl + q를 지정했으므로 Ctrl + q 입력 시 5개의 동작을 연속해서 진행하게 됩니다.
단축키와 함께 동작 가능한 옵션 키 4개는 다음과 같습니다. 만약 옵션키를 지정하지 않는 경우 단순 타자 입력등에도 지정된 동작이 일어날 수 있으므로 추천드리지 않습니다. ( ex : c 만 단축키로 지정 한 경우 copy 입력 시 매크로 동작함)
Alt
Ctrl
Shift
Win
Run_Info 값의 경우 동작하는 값입니다. 현재 위의 값 기준으로는 Ctrl + q 를 누르면
Ctrl + a > 전체 선택 후
Ctrl + c > 선택 내용 복사 후
Ctrl + v > 복사 내용 붙여넣기 ( 1회 째 ) 후 - 전체선택 된 상태이므로 기존 내용이 지워지며 붙여 넣기 되어 눈으로는 차이를 알 수 없음
Ctrl + v > 복사 내용 붙여넣기 ( 2회 째 ) 후
지정한 프로그램을 실행 합니다. - 해당 실행 파일이 존재하는 경우에만 실행 됩니다.
동작 화면 :
해당 프로그램 실행 시 1번 모니터 우측 하단에 Ctrl + Shift + f8 이 표시 되는데 해당 키는 프로그램 종료 키입니다.
결과 실행 파일 : -주의사항 :아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다. 인터넷에서 다운 받은 EXE의 경우보안알림이 뜰 확률이매우높습니다. 대부분의 보안알림은 경고성 안내이며 절대적인 문제 사항을 찾아서 알려주는 것은 아닙니다.
특정 위치의 색이 변하는 것을 인식하여 동작하는 툴을 제작하기 위해 쉽게 사용 가능한 함수는 PixelChecksum 함수 입니다. 도움말에서 해당 함수를 찾아서 예제를 구해 옵니다. Autoit 편집기에서 빈 문서를 열고 예제 코드를 붙여 넣은 후 저장해주세요.
#include <MsgBoxConstants.au3>
; Wait until something changes in the region 0,0 to 50,50
; Get initial checksum
Local $iCheckSum = PixelChecksum(0, 0, 50, 50)
; Wait for the region to change, the region is checked every 100ms to reduce CPU load
While $iCheckSum = PixelChecksum(0, 0, 50, 50)
Sleep(100)
WEnd
MsgBox($MB_SYSTEMMODAL, "", "Something in the region has changed!")
해당 코드는 해당 위치의 값(색)이 변화가 있는 경우 메세지 박스가 나오는 도구 입니다.
4개의 숫자 중 앞의 두 0 , 0 은 시작 지점입니다 왼쪽 값 위쪽값 입니다. 왼쪽 모니터 제일 위쪽이 시작 값이라고 생각하시면 됩니다.
시각 적으로 가장 쉽게 확인 가능한 방법은 마우스 이동시켜 보는 방법입니다.
MouseMove( 0 , 0 )
3번째 숫자 값과 4번째 숫자값도동일합니다. 마우스이동으로 위치를 확인 해주세요.
MouseMove( 0 , 0 )
MouseMove( 50 , 50 )
처음 가져온 코드를 F5로 동작시킨 후 0,0,50,50 위치에 변화를 주면 변화가 발생했다는 대화상자가 나타납니다. 가장 쉬운 변화 중 하나는 해당 위치에 메모장을 이동시켜 보는 동작도 괜찮습니다.
이걸 응용하여 내가 지정한 위치가 변한다면 단축키를 보내거나 마우스 움직임을 넣는 방식도 응용 가능합니다.
Bat 파일로 시간(초) 값을 전달하며 관련 값을 전달 하는 경우 해당 시간 경과 후 알람 소리를 발생시키게 됩니다. 총 3개의 파일로 구성되어 있습니다.
Run_Time.bat 파일을 메모장으로 편집하여 저장하면 되며, 3번째 숫자는 꼭 숫자 값으로 입력해야 합니다. 60초는 1분 이며, 초 단위로 계산해서 숫자를 입력하시면 됩니다. 만약 5분 마다 알람이 필요한 경우 300 을 입력하면 됩니다. 앞의 변수는 건들지 마시고 숫자값(초) 만 변경하며 사용하시면 됩니다.
bat 파일을 메모장으로 열어서 시간값은 자유롭게 편집 가능하며, 지정된 시간 마다 알람 소리가 나타나게 됩니다. 알람소리 파일은 Alert.MP3 이며, 소리교체할 경우 해당파일을 동일한 파일명으로 교체 하면 됩니다.
결과 실행 파일 : -주의사항 :아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다. 인터넷에서 다운 받은 EXE의 경우보안알림이 뜰 확률이매우높습니다.
만약 프로그램을 실행 할 때 중복해서 계속 실행해도 되는 프로그램이 있지만 1번만 실행되면 중복해서 실행되지 않아야 하는 프로그램도 있습니다.
Autoit 편집기의 도움말에서 _Singleton의 Example 를 가져오면 다음과 같은 내용을 확인 할 수 있습니다.
#include <Misc.au3>
#include <MsgBoxConstants.au3>
If _Singleton("test", 1) = 0 Then
MsgBox($MB_SYSTEMMODAL, "Warning", "An occurrence of test is already running")
Exit
EndIf
MsgBox($MB_SYSTEMMODAL, "OK", "the first occurrence of test is running")
해당 예제의 동작 확인을 하는 방법은 우선 해당 스크립트내용을 빈 문서에 붙여 넣은 후 test.au3로 저장 합니다.
그 후 상단 메뉴 Tool > Build 를 눌러주시면 test.exe 파일생성 된 것을 확인 할 수 있습니다.
이제 test.exe 를 처음 실행해 봅니다.
처음 실행 한 대화상자를 닫지 않은 상태로 다시 한번 test.exe를 실행합니다.
실행 된 상태에서 다시 실행 하면 중복 실행 되었다며 경고 대화상자가 나타나게 됩니다. 예제 코드를 응용하면 중복 실행 방지 코드로 다음과 같이 사용이 가능합니다.
#include <Misc.au3>
if _Singleton(@ScriptName,1) = 0 Then Exit
중복실행되면 안되는 프로그램에 위의 코드를 넣어준다면 중복 실행되지 않고 이미 실행 된 경우 조용히 종료되는 프로그램을 만들 수 있습니다.
추가적인 팁으로는 핫키(단축키) 생성 전에 해당 코드를 삽입 해주셔야 합니다. ( 핫키 관련 정보는 하단 링크 참조 )
몇일 후를 계산해 주는 소스와 툴 입니다. 메세지 박스 타이틀에 오늘날짜가 표시되도록 업데이트 한 버전입니다.
결과 소스 파일 :
결과 실행 파일 : -주의사항 :아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다. 인터넷에서 다운 받은 EXE의 경우보안알림이 뜰 확률이매우높습니다. 관련 메세지가 불안하신 경우 위에 AU3 파일이나 상단 링크의 스크립트 소스를 이용해서 직접 빌드해서 사용하시면 됩니다.
결과 실행 파일 : -주의사항 :아래 EXE 파일은 위 소스를 EXE로 변경하여 빠른 실행을 도와 주는 파일입니다. 인터넷에서 다운 받은 EXE의 경우보안알림이 뜰 확률이매우높습니다. 관련 메세지가 불안하신 경우 위에 AU3 파일이나 상단 링크의 스크립트 소스를 이용해서 직접 빌드해서 사용하시면 됩니다.
글자 형식을 변경하는 방법에 대하여 알아보겠습니다. Autoit 편집기의 도움말에서 BinaryToString 의 Example 를 가져오면 다음과 같은 내용을 확인 할 수 있습니다.
해당 Script를 실행하면 4번의 대화상자가 나타나며 일부 글자는 깨져서 표시 되는 것을 확인 할 수 있습니다.
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>
Example()
Func Example()
; Define the string that will be converted later.
; NOTE: This string may show up as ?? in the help file and even in some editors.
; This example is saved as UTF-8 with BOM. It should display correctly in editors
; which support changing code pages based on BOMs.
Local Const $sString = "Hello - 你好"
; Temporary variables used to store conversion results. $dBinary will hold
; the original string in binary form and $sConverted will hold the result
; afte it's been transformed back to the original format.
Local $dBinary = Binary(""), $sConverted = ""
; Convert the original UTF-8 string to an ANSI compatible binary string.
$dBinary = StringToBinary($sString)
; Convert the ANSI compatible binary string back into a string.
$sConverted = BinaryToString($dBinary)
; Display the resulsts. Note that the last two characters will appear
; as ?? since they cannot be represented in ANSI.
DisplayResults($sString, $dBinary, $sConverted, "ANSI")
; Convert the original UTF-8 string to an UTF16-LE binary string.
$dBinary = StringToBinary($sString, $SB_UTF16LE)
; Convert the UTF16-LE binary string back into a string.
$sConverted = BinaryToString($dBinary, $SB_UTF16LE)
; Display the resulsts.
DisplayResults($sString, $dBinary, $sConverted, "UTF16-LE")
; Convert the original UTF-8 string to an UTF16-BE binary string.
$dBinary = StringToBinary($sString, $SB_UTF16BE)
; Convert the UTF16-BE binary string back into a string.
$sConverted = BinaryToString($dBinary, $SB_UTF16BE)
; Display the resulsts.
DisplayResults($sString, $dBinary, $sConverted, "UTF16-BE")
; Convert the original UTF-8 string to an UTF-8 binary string.
$dBinary = StringToBinary($sString, $SB_UTF8)
; Convert the UTF8 binary string back into a string.
$sConverted = BinaryToString($dBinary, $SB_UTF8)
; Display the resulsts.
DisplayResults($sString, $dBinary, $sConverted, "UTF8")
EndFunc ;==>Example
; Helper function which formats the message for display. It takes the following parameters:
; $sOriginal - The original string before conversions.
; $dBinary - The original string after it has been converted to binary.
; $sConverted- The string after it has been converted to binary and then back to a string.
; $sConversionType - A human friendly name for the encoding type used for the conversion.
Func DisplayResults($sOriginal, $dBinary, $sConverted, $sConversionType)
MsgBox($MB_SYSTEMMODAL, "", "Original:" & @CRLF & $sOriginal & @CRLF & @CRLF & "Binary:" & @CRLF & $dBinary & @CRLF & @CRLF & $sConversionType & ":" & @CRLF & $sConverted)
EndFunc ;==>DisplayResults
내용에 주석이 많기 때문에 주석을 잘 참고 하신다면 별도의 설명이 없이도 사용이 가능합니다. 그러므로 여기서는 해당 내용의 사용 방법에 대하여 짧게 설명드리고자 합니다.
먼저 첫번째 입력 값은 StringToBinary를 통해 변환되는데 한번 사용 되며, 그 후 DisplayResults에 결과 확인용으로 사용 됩니다. ( 하단 이미지 참고 )
두번째 값은 Binary로 선언된 변수에 StringToBinary 로 첫번째 글자를 변환한 값 입니다. 대화상자에서 중간에 영어와 숫자로 나타나는 값입니다.
마지막 값은 Binary값을 다시 String로 고쳐서 확인하는 값입니다. 첫번째 대화상자에서는 일부 한자가 손상되어 표시되는 것을 확인 할 수 있습니다.
Binary로 변환하는 작업은 RPA에서 다국어를 변활할때 유용한 기능입니다. 영문 OS등 다양한 OS 환경에서는 특정 언어가 정상적으로 표시되지 않는 경우가 있습니다. 예를들어 영문 OS 에서 한글을 INI 파일에 기록하면 글자가 손상되어 기록 됩니다. 이러한 경우를 막기위해 Binary로 변환하여 기록하고 다시 변환하여 사용 한다면 RPA 작업 시 보다 안정적으로 사용이 가능해 집니다.