• password 방식 사용하기
    • 장점 : 복호화 안됨 - DB를 털어가도 암호는 털리지 않습니다.
    • 단점 : 복호화 안됨
  • 적용 방법
    • 암호 text 데이터 업데이트 하기
      • Update 테이블명 Set 컬럼명=password(컬럼명) where no_id = 조건값

 

  • 사용법
    • 복호화가 불가능 하므로 현재 누군가 입력한 암호가 올바른지 아닌지를 돌려주는 방식으로 처리 합니다.
      • 암호와 id가 일치하면 1을 돌려주므로 정상적인 로그인인지 확인 가능합니다. 
      • select count(*) from 테이블명 where 아이디컬럼명 = ? and 패스워드컬럼명 = password(?) 

 

 

  • AES_ENCRYPT /  AES_DECRYPT 방식 사용하기
    • 장점 : 복호화 가능
    • 단점 : 키 값 누출 되면 모두 털릴 수 있음
  • 적용 방법
    • 암호 text 데이터 업데이트 하기
      • Update 테이블명 Set 암호컬럼명=HEX(AES_ENCRYPT('암호값', '암호만들 키값')) where no_id = 조건값

 

  • 사용법
    • 복호화가 가능하므로 복호화 하여 값을 돌려받게 됩니다. .
      • 암호와 id가 일치하면 1을 돌려주므로 정상적인 로그인인지 확인 가능합니다. 
      • select  아이디컬럼명 , AES_DECRYPT( UNHEX(암호컬럼명) , '암호만들 키값') as 암호컬럼명    from 테이블명 WHERE no_id = 조건값;

 

  • 오류 대응
    • 만약 정상적으로 검색했는데 BLOB로 값이 표시되면 변환이 필요합니다.

  • select  아이디컬럼명 , CONVERT(AES_DECRYPT( UNHEX(암호컬럼명) , '암호만들 키값') USING utf8) as 암호컬럼명    from 테이블명 WHERE no_id = 조건값;

 

잘 동작하던 Appium 이 오류가 나타나며 더이상 진행 되지 않습니다.

Appium 에서 보면 Enqueue Failure: Failed to get system application: Timed out while fetching attributes 오류가 나타나는 것이 보입니다.

 

해당 오류 수정을 위해서는 몇가지 방법이 있지만 하나씩 순차적으로 확인이 필요합니다.

  • Step 1 Appium 업데이트 
    • npm install -g appium 

 

  • Step2 옵션값 변경 - 3개 모두 하실필요는 없으며 상황에 맞게 변경 하시면 됩니다.
    • useNewWDA : true
    • waitForQuiescence : false
    • daEventloopIdleDelay : 5

 

  • Step3 pip 업데이트
    • mac 기준
      • sudo pip3 install --upgrade pip3
    • windows 기준
      • pip install  --upgrade pip

 

  • Step4  bundleId 비활성화
    • 테스트할 어플 실행해 놓은 상태에서  "bundleId" 을 비활성해 해놓고 테스트 진행합니다.
  • Step5 Xcode 데이터 지우기
    • xcode 를 클리어 합니다.
      • 사용자/유저/Library/Developer/Xcode/Archives
      • 사용자/유저/Library/Developer/Xcode/DerivedData

 

 

 

기본적인 xml의 읽기 쪽 관련 항목은 다음 내용을 참고해주세요.

smart-west.tistory.com/75

 

[ Pthon ] xml 파일 읽기 / 분석 / 출력 하기

파이썬에서 xml 처리를 위해서는 ElementTree를 활용합니다. import xml.etree.ElementTree as elemTree 먼저 xml 데이터 인지 파일인지 확인이 필요합니다. 파일에서 읽어 오는 단계인 경우 아래와 같이 작업하

smart-west.tistory.com

 

먼저 불러온 파일은 다음 방식으로 편집이 가능합니다.

 

for nnn in root.iter("태그")
	new_nnn = int(nnn.text)+1
    nnn.text = str(new_nnn)
    nnn.attrib["속성"] = "aaa"
    nnn.set("속성" , "aaa")

 

태그 삭제를 위해서는 다음과 같이 진행 합니다.

root.remove("태그")

 

 

파일로 쓰는 방법은 다음과 같습니다.

 

doc.write("write_value.xml" , encoding = "utf-8" , xml_declaration= True)

 

 

 

화면상의 이미지를 찾는 방법은 다음과 같습니다. 찾을 이미지를 미리 준비 하셨다면 다음 3줄로 이미지를 찾는 작업은 완료 됩니다.

import pyautogui 
ImageFile = "E:\\경로\\BB.png"
find_img = pyautogui.locateOnScreen(ImageFile)

 

 

 

 

해당 위치로 마우스를 이동하는 코드는 다음과 같습니다.

 

pyautogui.moveTo(find_img)

 

만약 해당 위치를 클릭하는 방법은 다음과 같습니다.

pyautogui.click(find_img)

 

조금 천천히 클릭하길 원하신다면 뒤에 옵션 값을 넣어주시면 됩니다.

pyautogui.click(find_img , duration=0.1 )

 

만약 find_img를 그냥 프린트 하게 되면 다음과 같이 값이 나타납니다. (이미지와 pc환경에 따라 값은 조금씩 달라집니다.)

 

값을 하나씩 가져와서 표시 하려면 아래와 같이 하시면 됩니다.

print(find_img[0])
print(find_img[1])
print(find_img[2])
print(find_img[3])

 

프로그램을 실행하고 핸들을 구해서 종료하는 기본 패턴입니다.

 

가장 간단한 프로그램 중 하나인 메모장을 실행하고, 1초 대기하고, 메모장의 핸들을 구하고, 메모장을 강제 종료하는 코드는 다음과 같습니다.

import pyautogui
import win32gui
import win32con
import subprocess

subprocess.Popen('notepad.exe')
pyautogui.sleep(1)
hwnd = win32gui.FindWindow(None, "제목 없음 - Windows 메모장")
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)

 

 

 

 

이제 메모장을 실행하여 메모장편집창의 크기를 구하는 방법은 다음과 같습니다. 각각의 핸들과 자식개체의 핸들을 구해서 크기값을 표시해줍니다.

Edit 개체의 크기를 구하는 방식으로 적용 되었으며 크기를 프린트 하도록 설정 하였습니다.

 

 

import pyautogui
import win32gui
import win32con
import subprocess

subprocess.Popen('notepad.exe')
pyautogui.sleep(1)
hwnd = win32gui.FindWindow("Notepad", "제목 없음 - Windows 메모장")
print(hwnd)
old = win32gui.GetWindowText(hwnd)
print(old)

child_class = "Edit"
hwnd_A = win32gui.FindWindowEx(hwnd, 0, child_class, None)

print(hwnd_A)

rect = win32gui.GetWindowRect(hwnd_A)
x = rect[0]
y = rect[1]
w = rect[2] - x
h = rect[3] - y
print("Window %s:" % win32gui.GetWindowText(hwnd_A))
print("\tLocation: (%d, %d)" % (x, y))
print("\t    Size: (%d, %d)" % (w, h))

 

현재 자식개체의 클래스를 기반으로 동작 하도록 설정하였으므로 Mousemove를 통해 현재 값에 대한 정상적인 동작 확인 가능여부를 확인 할 수 있습니다.

 

우선 파이썬에서  pyautogui를 설치해 줘야 합니다. 

pip install pyautogui 를 입력하면 다음과 같이 진행됩니다.

 

성공적으로 설치가 완료 되었다면 이제 GUI 기반 동작이 가능합니다.

 

  • 모니터 크기 값 구하기
import pyautogui 
M_size = pyautogui.size()
print(M_size)

결과 값 : 

Size(width=1920, height=1080)

참고 : 모니터가 2개여도 1번 모니터 기준 값이 나타납니다.

 

만약 하나씩 값이 필요한 경우에는 배열 방식으로 적어주시면 됩니다.

import pyautogui 
M_size = pyautogui.size()
print(M_size[0])
print(M_size[1])

 

  • 마우스위치 값 구하기
M_pos = pyautogui.position()
print(M_pos[0])
print(M_pos[1])

 

결과 값 : 

2번 모니터에 마우스가 위치하면 해당 위치의 값이 숫자로 정상적으로 나타납니다.

 

 

핸들을 구하기 위해서는 추가적으로 pip로 설치해줘야 합니다.

pip install win32gui

 

핸들 값을 구해서 print 하는 함수는 다음과 같습니다. 

import win32gui
 
def EnumWindowsHandler(hwnd, extra):
	wintext = win32gui.GetWindowText(hwnd)
	print (hwnd, wintext)
 
if __name__ == '__main__':
	win32gui.EnumWindows(EnumWindowsHandler, None)

 

해당 코드가 동작하면 핸들리스트가 나타납니다. ( PC 환경 따라 해당 리스트는 차이가 있습니다.)

 

 

추가적으로 마우스에 대한 정보를 추출해 주는 파이썬 툴은 다음과 같습니다.

import pyautogui
pyautogui.mouseInfo()

해당 프로그램을 사용하면 아래 대화상자가 나타나며 실시간으로 마우스가 위치한 위치/ 색상값을 보여 줍니다. 자동화시 유용하게 사용 가능합니다.

 

화면 캡쳐는 다음 코드를 이용하면 됩니다.(1번 모니터만 기본으로 캡쳐 됩니다.)

img_capture = pyautogui.screenshot()
img_capture.save("ssssss.png")

지금 방법은 파일을 불러와서 동작하는 방법입니다. 동작 전 Xlsx 파일을 미리 준비 해야 합니다.

파일을 최초로 생성하기 위한 방법은 다음 링크를 참조 하세요.

 

smart-west.tistory.com/67

 

[ Python ] Excel 파일에 데이터 기록하기

python 에서 Excel 파일로 데이터를 내보내는 방법은 굉장히 쉬운 편입니다. VSCode 기준 Excel 파일 생성에 필수적인 코드는 다음과 같습니다. from openpyxl import Workbook T_workbook = Workbook() T_workshe..

smart-west.tistory.com

 

데이터를 불러오는데 필수적인 항목은 다음과 같습니다. 여기서 data_only 는 현재 보이는 상태로 불러오는 옵션입니다. 나중에 수식이 아닌 수식위치의 값이 오는 것을 확인 할 수 있습니다.

from openpyxl import load_workbook
T_workbook = load_workbook("폴더\\sample.xlsx" , data_only=True )
T_worksheet = T_workbook.active

해당 코드를 동작하기 전에 자동화로 생성 된 문서인 경우엔 excel에서 한번 열고 저장하고 닫아야 합니다. 

 

문서를 불러도 별다른 동작을 하지 않는경우엔 프로그램이 조용히 종료되게 됩니다.(화면상 아무런 변화를 알 수 없습니다.)

내가 문서를정상적으로 불러왔는지 확인을 위해서 print()함수를 이용해 주려 합니다.

for row in T_worksheet.values:
    for cell in row:
        print(cell)

 

 

하단에 결과를 확인하면 다음과 같이 나타납니다.

 

None는 데이터가 없는 빈칸을 의미 합니다. 만약 해당 값이 의미 없는 분은 예외처리 해주시면 됩니다.

for row in T_worksheet.values:
    for cell in row:
        if cell == None :
            continue
        else:
            print(cell)

 

다음 코드를 진행하면 다음과 같이 필요한 내용만 나타납니다.

 

이제 정상적으로 표시 되었으므로 수정 밑 재저장 작업을 하면 내용이 추가 됩니다.

기존 내용을 조금씩 변경 후 저장해보겠습니다.

T_worksheet["B2"] = "bb"
T_worksheet["C3"] = 55
T_worksheet["D4"] = 66
T_workbook.save("폴더\\sample.xlsx")      

 

코린이를 위한 전체 동작 코드는 다음과 같습니다.

from openpyxl import load_workbook
T_workbook = load_workbook("폴더\\sample.xlsx" , data_only=True )
T_worksheet = T_workbook.active
for row in T_worksheet.values:
    for cell in row:
        if cell == None :
            continue
        else:
            print(cell)


T_worksheet["B2"] = "bb"
T_worksheet["C3"] = 55
T_worksheet["D4"] = 66
T_workbook.save("폴더\\sample.xlsx") 

 

값을 넣고 저장 후 다시 sample.xlsx 문서를 열어 봅니다.

 

다른 값은 정상적으로 변경 되었으나, 수식값은 기존 수식이 아닌 숫자값으로 변경되어 유지 되는 것을 확인 할 수 있습니다.

만약 수식이 유지되길 원하시는 경우 data_only=True 를 제거 해주시면 됩니다. 

 

단순 글자 추가가 아닌 이미지 추가도 쉽게 가능합니다.

from openpyxl.drawing.image import Image
img= Image("폴더\\AA.png")
T_worksheet.add_image(img, "F6")
T_workbook.save("폴더\\sample.xlsx")      

 

혹시 오류가 나는 경우엔 Pillow 를 설치해줘야 합니다.

pip install Pillow

 

정상적으로 진행 되었다면 이미지가 삽입 된 것을 확인 할 수 있습니다.

python 에서 Excel 파일로 데이터를 내보내는 방법은 굉장히 쉬운 편입니다. 

 

VSCode 기준 Excel 파일 생성에 필수적인 코드는 다음과 같습니다.

from openpyxl import Workbook
T_workbook = Workbook()
T_worksheet = T_workbook.active
T_workbook.save("경로\\sample.xlsx")
T_workbook.close()

 

처음 3줄은 거의 기본값이라고 생각하시면 되며, save의 경로 값은 개인 PC상황에 따라 변경해 주시면 됩니다.

이제 데이터를 추가하는 방법은 다음과 같은 코드를 save 전에 넣어주면 됩니다.

T_worksheet["B2"] = "aa"

 

단순히 String 값을 넣는 방법은 String로 넣으면 되며, int 숫자 값은 그냥 숫자 값을 넣어주면 됩니다.

T_worksheet["C3"] = 11

 

당연히 Excel의 꽃인 함수도 사용 가능합니다.

T_worksheet["C3"] = 11
T_worksheet["D4"] = 22
T_worksheet["E5"] = "=SUM(C3,D4)"

 

 

해당 항목들을 모두 반영한 코드는 다음과 같습니다.

from openpyxl import Workbook
T_workbook = Workbook()
T_worksheet = T_workbook.active
T_worksheet["B2"] = "aa"
T_worksheet["C3"] = 11
T_worksheet["D4"] = 22
T_worksheet["E5"] = "=SUM(C3,D4)"
T_workbook.save("폴더\\sample.xlsx")

 

생성 된 xlsx파일을 열면 다음 내용이 나타납니다.

 

해당 sample.xlsx 문서는 한번 열고 그대로 닫아도 저장여부를 물어보게 됩니다. 

다음 작업을 하기 전에 한번은 저장하기를 눌러주세요.

excel은 한번 열고 닫는 과정에서 함수등을 계산해서 다시 저장하는 작업을 진행하는데 다음 작업전에 해당 작업이 안된 경우 정상적인 값이 표시되지 않을 수 있습니다.

 

다음 내용으로 넘어가기 전에는 필수로 excel에서 저장이 필요합니다.

smart-west.tistory.com/68

 

[ Python ] Excel 파일 편집하기

지금 방법은 파일을 불러와서 동작하는 방법입니다. 동작 전 Xlsx 파일을 미리 준비 해야 합니다. 파일을 최초로 생성하기 위한 방법은 다음 링크를 참조 하세요. smart-west.tistory.com/67 [ Python ] Excel

smart-west.tistory.com

 

 

  • 시트 추가하기/이름 변경하기

신규 시트를 추가하고 이름을 변경하는 코드는 다음과 같습니다.

T_worksheet = T_workbook.create_sheet()
T_worksheet.title = "TestSheet"

여러개의 배열이 있는 경우 원하는 위치로 밀어 넣는 방법에 대하여 알아보고자 합니다.

 

먼저 테스트를 위한 기본 배열 2개를 생성합니다.

#include <Array.au3>

Local $avArrayTarget[9] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Local $avArraySource[2] = [100, 200]

 

2개의 배열을 각각 열어보면 다음과 같습니다.

 

첫번째 배열은 1~9까지의 숫자입니다.

두번째 배열을 100과 200 2개의 값을 가진 배열 입니다.

 

첫번째 배열에 두번째 배열을 밀어넣어 보겠습니다.

_ArrayPush($avArrayTarget, $avArraySource)

다음코드의 결과는 다음과 같습니다.

첫번째 배열 크기가 변하지 않고 아래쪽에 붙게 되므로 기존 값중 제일 상단 값 2개가 사라진 것을 확인 할 수 있습니다.

1과 2가 밀려서 사라지고 3부터 배열값이 시작되며, 뒤에 2개의 값인 100과 200이 추가 되었습니다.

 

_ArrayPush($avArrayTarget, $avArraySource, 1)

_ArrayPush 뒤에 숫자 1을 붙이게 되면 다음과 같은 변화가 나타납니다. 왼쪽에 값을 붙여서 첫번째 배열 값이 우측으로 밀려나며 끝자리 숫자 2개가 사라지게 됩니다. 

8과 9 값이 밀려서 사라진 것을 확인 할 수 있습니다.

배열에 배열을 추가하는 것이 아닌 첫번째 배열에 일반 텍스트 추가도 가능합니다.

_ArrayPush($avArrayTarget, "Hello world!", 1)

 

다음과 같이 텍스트 추가의 결과는 다음과 같습니다.

 

 

도서 추천

https://www.millie.co.kr/v3/bookDetail/179592953?referrer=searchResult

 

AutoIt을 활용한 업무 자동화

배우기 쉬운 프리웨어 자동화 언어인 AutoIt을 사용하여 업무를 자동화 합니다. 이 책은 프로그래밍에 대한 지식이나 이론적인 부분을 살펴보기보다는 ..

www.millie.co.kr

 

 

https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000005138322

 

AutoIt을 활용한 업무 자동화 | PlanB | 스프링드림- 교보ebook

단순하지만 반복적이고 손이 많이 가는 업무를 진행하고 있나요? 업무 자동화를 꿈꾸지만 프로그래밍을 모르는 비전공자라서 시작을 두려워 하고 있지 않은가요? 프로그래밍을 잘 몰라도 예제

ebook-product.kyobobook.co.kr

 

배열은 가장 많이 사용하는 방법 중 하나 입니다. 

배열 생성에 관련 내용은 하단 내용을 참고 하세요.

smart-west.tistory.com/52

 

[ Autoit ] Array ( 배열 ) 추가하기

도움말의 ArrayAdd 로 검색하면 다음과 같은 예제가 나타납니다. #include Local $aArray, $sFill Local $aArray_Base[2][2] = [["Item 0 - 0", "Item 0 - 1"], ["Item 1 - 0", "Item 1 - 1"]] _ArrayDisplay($aAr..

smart-west.tistory.com

 

단순히 마우스의 위치나 제품 핸들 값을 통한 크기값을 가져와도 모두 배열 값으로 돌아오게 됩니다.

이러한 배열 값을 효과적으로 사용 하는 방법을 익히면 보다 효율적인 코딩이 가능해 집니다.

 

오늘 확인할 예제 코드는 다음과 같습니다.

#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" 을 검색하는 코드 입니다.

; Search col 0
$iIndex = _ArrayBinarySearch($aArray, "#10", 0, 0, 0)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)

 

 

해당 검색 항목은 첫번째 줄을 검색해주게 됩니다. 검색한 항목은 Row1에 위치한 값입니다.

 

 

 

검색 결과는 대화상자로 표시 되며 줄수가 표시 됩니다. 줄수기준은 0 부터 시작하므로 1번째 줄 값인 1이 표시 되는것을 확인 할 수 있습니다.

 

 

 

두번째 검색내용은 다음과 같습니다.

 

; Search col 1
$iIndex = _ArrayBinarySearch($aArray, "#31", 0, 0, 1)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)

두번째 줄인 Col1을 검색해 줍니다.

 

그 후 검색을 할 내용은 #31입니다.

 

해당 내용을 진행한 결과는 다음과 같습니다.

줄수나 칸수는 0부터 시작한다는걸 기준으로 4번째 줄인 Row3에 해당값이 위치하여 3이 결과 값으로 출력 됩니다.

 

도서 추천

https://www.millie.co.kr/v3/bookDetail/179592953?referrer=searchResult

 

AutoIt을 활용한 업무 자동화

배우기 쉬운 프리웨어 자동화 언어인 AutoIt을 사용하여 업무를 자동화 합니다. 이 책은 프로그래밍에 대한 지식이나 이론적인 부분을 살펴보기보다는 ..

www.millie.co.kr

 

 

https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000005138322

 

AutoIt을 활용한 업무 자동화 | PlanB | 스프링드림- 교보ebook

단순하지만 반복적이고 손이 많이 가는 업무를 진행하고 있나요? 업무 자동화를 꿈꾸지만 프로그래밍을 모르는 비전공자라서 시작을 두려워 하고 있지 않은가요? 프로그래밍을 잘 몰라도 예제

ebook-product.kyobobook.co.kr

 

도움말의 ArrayAdd 로 검색하면 다음과 같은 예제가 나타납니다.

 

#include <Array.au3>

Local $aArray, $sFill

Local $aArray_Base[2][2] = [["Item 0 - 0", "Item 0 - 1"], ["Item 1 - 0", "Item 1 - 1"]]
_ArrayDisplay($aArray_Base, "2D - Base array")

; Add item delimited string
$aArray = $aArray_Base
$sFill = "New Item 2 - 0|New Item 2 - 1"
_ArrayAdd($aArray, $sFill)
_ArrayDisplay($aArray, "2D - Item delimited")

; Add row delimited string - load in col 1
$aArray = $aArray_Base
$sFill = "New Item 2 - 1" & @CRLF & "New Item 3 - 1"
_ArrayAdd($aArray, $sFill, 1)
_ArrayDisplay($aArray, "2D - Row Delimited")

; Add item & row delimited string
$aArray = $aArray_Base
$sFill = "New Item 2 - 0|New Item 2 - 1" & @CRLF & "New Item 3 - 0|New Item 3 - 1"
_ArrayAdd($aArray, $sFill)
_ArrayDisplay($aArray, "2D - Item & row Delimited")

; Add a 2D array
$aArray = $aArray_Base
Local $aFill[2][2] = [["New Item 2 - 1", "New Item 2 - 2"], ["New Item 3 - 1", "New Item 3 - 2"]]
_ArrayAdd($aArray, $aFill)
_ArrayDisplay($aArray, "2D - 2D Array")

; Add a 2D array - Single item/column - load in col 1
$aArray = $aArray_Base
Local $aFill[2][1] = [["New Item 2 - 1"], ["New Item 3 - 1"]]
_ArrayAdd($aArray, $aFill, 1)
_ArrayDisplay($aArray, "2D - 2D Array")

 

다음 배열의 항목들이 동작하는 순서를 위에 코드를 기반으로 알아보려 합니다.

#include <Array.au3>

Local $aArray, $sFill

Local $aArray_Base[2][2] = [["Item 0 - 0", "Item 0 - 1"], ["Item 1 - 0", "Item 1 - 1"]]
_ArrayDisplay($aArray_Base, "2D - Base array")

최초 설정배열 값은 다음과 같습니다. 이것은 베이스 값으로 계속 재사용 될 예정입니다. 이 값을 1번 배열이라 호칭하겠습니다.

2 * 2 배열에 4개의 값이 각각 추가되어 있는 것을 확인 할 수 있습니다.

 

 


 

 

 

; Add item delimited string
$aArray = $aArray_Base
$sFill = "New Item 2 - 0|New Item 2 - 1"
_ArrayAdd($aArray, $sFill)
_ArrayDisplay($aArray, "2D - Item delimited")

 

두번째 표시되는 배열 값은 배열값을 하단에 추가하는 방법 입니다. 1번 배열을 새로운 배열 변수에 담은 후 ( 원본인 1번 재열 값은 건드리지 않음 ) 하단에 값을 추가 하였습니다.

 

 

 


; Add row delimited string - load in col 1
$aArray = $aArray_Base
$sFill = "New Item 2 - 1" & @CRLF & "New Item 3 - 1"
_ArrayAdd($aArray, $sFill, 1)
_ArrayDisplay($aArray, "2D - Row Delimited")

1번 배열값을 다시 담은 후 하단에 배열을 추가 합니다. 가로 줄이 아니라 세로로 값을 추가 합니다. 특징은 col 0번 제일 앞줄이 아닌 col 1번인 라인에 값을 추가합니다.

 

 


 

; Add item & row delimited string
$aArray = $aArray_Base
$sFill = "New Item 2 - 0|New Item 2 - 1" & @CRLF & "New Item 3 - 0|New Item 3 - 1"
_ArrayAdd($aArray, $sFill)
_ArrayDisplay($aArray, "2D - Item & row Delimited")

이번엔 기본 배열값 하단에 4개의 값을 추가합니다. 

 

 


; Add a 2D array
$aArray = $aArray_Base
Local $aFill[2][2] = [["New Item 2 - 1", "New Item 2 - 2"], ["New Item 3 - 1", "New Item 3 - 2"]]
_ArrayAdd($aArray, $aFill)
_ArrayDisplay($aArray, "2D - 2D Array")

 

위의항목과 결과는 동일하지만 위에는 String 값을 기호와 함께 추가 했다면 이번엔 배열에 배열을 추가한 것을 확인 할 수 있습니다.

 


; Add a 2D array - Single item/column - load in col 1
$aArray = $aArray_Base
Local $aFill[2][1] = [["New Item 2 - 1"], ["New Item 3 - 1"]]
_ArrayAdd($aArray, $aFill, 1)
_ArrayDisplay($aArray, "2D - 2D Array")

 

3번째 배열과 동일한 방법 입니다. 

위에는 String 값이였지만 이번에는 배열에 배열로 추가할 수 있습니다.

 

 

 

 

 

 

 

 

프로그램에서 로딩 프로그레스 바로 상태를 표시 해준다면 보다 직관적인 프로그램 구성이 가능해집니다. 

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

 

 

마지막으로 종료( 해당 프로그레스바가 사라지도록 ) 해주는 함수로 구성되어 있습니다.

    ProgressOff()

다른 외부 프로그램을 실행하는 방법알아보려 합니다. 가장 기본적인 명령어는 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)

 

반복문 중 Do... Until  입니다.

 

0 에서 9 까지 10번 반복 되는 코드 입니다.

#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

 

hotkeyset 관련 추가적인 정보는 하단 링크를 참조하세요.

[ Autoit ] 핫키(단축키) 생성하기

 

[ Autoit ] 핫키(단축키) 생성하기

버튼이 아닌 단축키로 동작하기 위해서 핫키를 지정해서 넣을 수 있습니다. Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.  도움말이 표시되면 ��

smart-west.tistory.com

 

특정 위치의 색상값을 추출하는 방법에 대하여 알아보려 합니다. 이전 Pixel 관련 블로그 내용과 해당 방법을 연계하면 실시간으로 색상을 추출하여 추적하는 도구 제작이 가능합니다.

 

[ 색상 값 마우스 추출 하기 ]

smart-west.tistory.com/40

 

[ Autoit ] 특정 색상 추적하여 해당 색상 자동으로 클릭하기

먼저 내가 원하는 색상의 정확한 값을 구하는 방법은 하단 툴을 통해 구해올 수 있습니다. smart-west.tistory.com/24 [ Autoit ] Au3Info.exe 를 활용하여 외부 프로그램 정보 얻기 자동화를 위해서는 사용하�

smart-west.tistory.com

 

이번에 이용할 함수는 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 값을 각각 지정하여 특정 위치의 색상 값을 구한 후 구해진 색상의 시작 지점(왼쪽위 기준)으로 마우스를 이동 시키는 코드 입니다.

 

 

도서 추천

https://www.millie.co.kr/v3/bookDetail/179592953?referrer=searchResult

 

AutoIt을 활용한 업무 자동화

배우기 쉬운 프리웨어 자동화 언어인 AutoIt을 사용하여 업무를 자동화 합니다. 이 책은 프로그래밍에 대한 지식이나 이론적인 부분을 살펴보기보다는 ..

www.millie.co.kr

 

 

https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000005138322

 

AutoIt을 활용한 업무 자동화 | PlanB | 스프링드림- 교보ebook

단순하지만 반복적이고 손이 많이 가는 업무를 진행하고 있나요? 업무 자동화를 꿈꾸지만 프로그래밍을 모르는 비전공자라서 시작을 두려워 하고 있지 않은가요? 프로그래밍을 잘 몰라도 예제

ebook-product.kyobobook.co.kr

 

먼저 내가 원하는 색상의 정확한 값을 구하는 방법은 하단 툴을 통해 구해올 수 있습니다.

 

smart-west.tistory.com/24

 

[ Autoit ] Au3Info.exe 를 활용하여 외부 프로그램 정보 얻기

자동화를 위해서는 사용하는 프로그램의 정보가 필수 적인 경우가 많은데요. 이 정보를 얻기위해 Autoit에서는 기본적인 프로그램을 제공하고 있습니다. 기본 경로에 설치 하였다면 하단 경로에

smart-west.tistory.com

 

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

 

만약 특정 위치의 화면이 변화가 있는 경우 동작하는 코드를 넣고 싶으시다면 하단 내용을 참고하시면 됩니다.

smart-west.tistory.com/37

 

[ Autoit ] 화면 색상 변화 인식하기

특정 위치의 색이 변하는 것을 인식하여 동작하는 툴을 제작하기 위해 쉽게 사용 가능한 함수는 PixelChecksum 함수 입니다. 도움말에서 해당 함수를 찾아서 예제를 구해 옵니다. Autoit 편집기에서 ��

smart-west.tistory.com

 

특정 위치의 색이 변하는 것을 인식하여 동작하는 툴을 제작하기 위해 쉽게 사용 가능한 함수는 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 위치에 변화를 주면 변화가 발생했다는 대화상자가 나타납니다. 가장 쉬운 변화 중 하나는 해당 위치에 메모장을 이동시켜 보는 동작도 괜찮습니다.

 

이걸 응용하여 내가 지정한 위치가 변한다면 단축키를 보내거나 마우스 움직임을 넣는 방식도 응용 가능합니다.

단축키 동작 방식 : 

smart-west.tistory.com/22?category=923312

 

 

[ Autoit ] Send로 키보드 값 입력하기 #1 - 기본편

RPA 자동화를 위해 키 값을 입력하는데 활용하는 Send에 대하여 알아보겠습니다. Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.  도움말이 표시되��

smart-west.tistory.com

 

마우스 입력 방식  : 

[ Autoit ] 마우스 컨트롤 하기 #1 - 기본편

 

[ Autoit ] 마우스 컨트롤 하기 #1 - 기본편

기본적인 마우스의 움직임을 조절하기 위해서는 MouseMove를 이용합니다. 원하는 위치로 이동시키기 위해서는 좌측값과 상단 값을 지정하여 이동하면됩니다. MouseMove( 350 , 250 ) 간단한 숫자를 입력

smart-west.tistory.com

 

만약 프로그램을 실행 할 때 중복해서 계속 실행해도 되는 프로그램이 있지만 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 

 

중복실행되면 안되는 프로그램에 위의 코드를 넣어준다면 중복 실행되지 않고 이미 실행 된 경우 조용히 종료되는 프로그램을 만들 수 있습니다.

추가적인 팁으로는 핫키(단축키) 생성 전에 해당 코드를 삽입 해주셔야 합니다.  ( 핫키 관련 정보는 하단 링크 참조 ) 

[ Autoit ] 핫키(단축키) 생성하기

 

[ Autoit ] 핫키(단축키) 생성하기

버튼이 아닌 단축키로 동작하기 위해서 핫키를 지정해서 넣을 수 있습니다. Autoit 편집기를 실행 후 [ File ] > [ New ] 하여 빈 문서를 생성하여 저장 후 [ F1 ] 키를 누르세요.  도움말이 표시되면 ��

smart-west.tistory.com

만약 핫키(단축키) 생성 후 종료코드를 넣게 되면 뒤에 실행 된 프로그램이 핫키를 가져온 후 종료되어 이전 프로그램에서 단축키 동작이 올바르게 동작하지 않을 가능성이 높습니다.

 

 

글자 형식을 변경하는 방법에 대하여 알아보겠습니다. 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

 

내용에 주석이 많기 때문에 주석을 잘 참고 하신다면 별도의 설명이 없이도 사용이 가능합니다.  그러므로 여기서는 해당 내용의 사용 방법에 대하여 짧게 설명드리고자 합니다.

 

첫번째 대화상자가 표시되는데 필요한 Script는 다음 5줄 입니다. 

Local Const $sString = "Hello - 你好"
Local $dBinary = Binary(""), $sConverted = ""
$dBinary = StringToBinary($sString)
$sConverted = BinaryToString($dBinary)
DisplayResults($sString, $dBinary, $sConverted, "ANSI")

먼저 첫번째 입력 값은 StringToBinary를 통해 변환되는데 한번 사용 되며, 그 후 DisplayResults에 결과 확인용으로 사용 됩니다. ( 하단 이미지 참고 )

 

두번째 값은 Binary로 선언된 변수에 StringToBinary 로 첫번째 글자를 변환한 값 입니다. 대화상자에서 중간에 영어와 숫자로 나타나는 값입니다. 

 

 

마지막 값은 Binary값을 다시 String로 고쳐서 확인하는 값입니다. 첫번째 대화상자에서는 일부 한자가 손상되어 표시되는 것을 확인 할 수 있습니다.

 

Binary로 변환하는 작업은 RPA에서 다국어를 변활할때 유용한 기능입니다. 영문 OS등 다양한 OS 환경에서는 특정 언어가 정상적으로 표시되지 않는 경우가 있습니다. 예를들어 영문 OS 에서 한글을 INI 파일에 기록하면 글자가 손상되어 기록 됩니다. 이러한 경우를 막기위해 Binary로 변환하여 기록하고 다시 변환하여 사용 한다면 RPA 작업 시 보다 안정적으로 사용이 가능해 집니다.

+ Recent posts