Lua 스크립트 사용시 이미지맥스 내장 함수
에디터 특성상 내용이 길면 줄 간격이 맞지 않습니다.
이미지맥스 카페 내장함수 게시물을 참고 부탁드립니다.
https://cafe.naver.com/imagemax/302
이미지맥스는 직관적이고 사용이 쉬운 UI를 채택하면서
UI에서 지원하지 않는 부분은 Lua 스크립트로 보완할 수 있습니다.
Lua 문법에 따라 변수, 함수, 조건문, 반복문, 각종 연산 등을 수행할 수 있으며
다음과 같은 이미지맥스의 내장함수를 호출할 수 있습니다.
현재까지 추가된 내장함수는 다음과 같습니다.
-- ms(밀리초)동안 현재 쓰레드(이미지맥스)의 실행을 일시 중단합니다.
Sleep(uint ms)
-- 예제) Sleep(500) -- 0.5초 딜레이
-- 시스템이 시작된 이후 경과한 시간(밀리초)을 반환합니다.
t = GetTickCount()
-- 리턴값: 64비트 부호없는 정수
-- 로그창에 text를 출력합니다.
print(string text)
-- 현재 액션 이후 다음 액션 n개를 건너뜁니다.
PassAct(uint count)
-- 현재 액션 이후 다음 액션들을 모두 건너뜁니다.
PassAllAct()
-- 현재 액션 이후 인식 실패시 액션으로 건너뜁니다.
GotoFailAct()
-- 이미지를 활성 또는 비활성 상태로 변경합니다.
EnableImage(bool enable, string imagename)
-- enable: true or false
-- 이미지의 활성/비활성 상태를 묻습니다.
ret = IsEnableImage(string imagename)
-- 리턴값: true or false
-- 멀티이미지 인식을 수행합니다.
ret = MultiImage(string opimage)
-- 리턴값: 인식여부(0,1)
예제1) ret = MultiImage('이미지001&이미지002')
예제2) ret = MultiImage('이미지001|(이미지002&이미지003)')
예제3) ret = MultiImage('이미지001|("이미지001(2)"&이미지003)') -- 이미지이름에 ()가 포함된 경우 따옴표 사용
-- 다음 인식 순서를 해당 이미지로 변경합니다.
GotoImage(string imagename)
-- 이미지를 인식합니다.
ret, acc, ix, iy, sx, sy = ImageSearch(string imagename)
ret, acc, ix, iy, sx, sy = ImageSearch(string imagename, int acc, int[] roi)
-- 리턴값: 인식여부(0,1), 유사도, 이미지센터기준 x, y, 이미지원점기준 x, y
예제) ret, acc, ix, iy = ImageSearch('이미지001')
if(ret == 1) then
print('이미지001 발견')
Mouse(LBUTTON, CLICK, ix, iy) -- 이미지001 위치 클릭
end
참고) 반복문에서 ImageSearch 함수를 호출하여 0.01초 단위의 순간적으로 변화되는
이미지를 인식하려면 내장 변수 imagesearch_refresh = 1로 변경하여야 합니다.
-- 이미지 인식 성공시 클릭합니다.
ret = ImageClick(string imagename)
ret = ImageClick(string imagename, int x, int y, int rand_x, int rand_y, double delaysec)
-- x, y: 이미지센터기준 클릭 offset
-- rand_x, rand_y: 랜덤 offset(기본값: 5, 5)
-- delaysec: 이미지 클릭 후 딜레이(초)
-- 리턴값: 인식여부(0,1)
-- 최근 찾은 이미지를 클릭합니다.
ImageClick()
ImageClick(nil, x, y, rand_x, rand_y, delaysec)
-- imagename이 nil인 경우 최근 찾은 이미지
예제) '이미지 클릭' 액션과 동일한 ImageClick() 스크립트
-- 이미지를 저장할 당시 위치를 강제로 클릭합니다.
ImageClickForce(string imagename)
ImageClickForce(string imagename, int x, int y, int rand_x, int rand_y, double delaysec)
-- x, y: 이미지센터기준 클릭 offset
-- rand_x, rand_y: 랜덤 offset(기본값: 5, 5)
-- delaysec: 이미지 클릭 후 딜레이(초)
예제) ImageClickForce('이미지001') -- 이미지서치 안하고 저장된 위치 강제 클릭
-- 이미지의 ROI를 변경합니다.
런타임시 원본이미지의 ROI가 변경되며 Stop상태가 될 때까지 유지됩니다.
-- 마우스 입력을 수행합니다.
Mouse(LBUTTON, CLICK, int x1, int y1)
Mouse(LBUTTON, CLICK, int x1, int y1, int x2, int y2, int rand_x, int rand_y, double delaysec, int iteration, speed, type)
-- arg1: LBUTTON|RBUTTON|MBUTTON -- 버튼
-- arg2: CLICK|DBCLICK|MOVE|DOWN|UP|WHEELUP|WHEELDOWN -- 이벤트
-- x1, y1: 입력 시작 좌표
-- x2, y2: 입력 해제 좌표
-- rand_x, rand_y: 랜덤 좌표(기본값: 5, 5)
-- delaysec: 마우스 입력 후 딜레이(초)
-- iteration: 입력 반복 횟수
-- speed: FASTEST|FASTER|NORMAL|SLOWER|SLOWEST -- 속도
-- type: MKEVENT|MESSAGE -- 입력방식 (활성,비활성)
예제1) Mouse(LBUTTON, CLICK, 100, 100) -- 인식 대상 창 기준 (100, 100) 좌표 클릭
예제2) Mouse(LBUTTON, WHEELDOWN, 100, 100) -- 인식 대상 창 기준 (100, 100) 좌표 휠 다운
예제3) Mouse(LBUTTON, CLICK, 100, 100, 0, 0, 0, 0, 0.5, 1, FASTER, MKEVENT) -- 활성 입력으로 (100, 100) 좌표 클릭
-- 마우스 드래그를 수행합니다.
MouseDrag(LBUTTON, int x1, int y1, double press_sec1, int x2, int y2, double press_sec2)
MouseDrag(LBUTTON, int x1, int y1, double press_sec1, int x2, int y2, double press_sec2, int rand_x, int rand_y, double delay_sec, int iteration, speed, type)
-- arg1: LBUTTON|RBUTTON|MBUTTON -- 버튼
-- x1, y1: 드래그 시작 좌표
-- press_sec1: 시작 좌표 마우스 누름 딜레이(초)
-- x2, y2: 드래그 마지막 좌표
-- press_sec2: 마지막 좌표 마우스 누름 딜레이(초)
-- rand_x, rand_y, delay_sec, iteration, speed, type: 상동(Mouse 함수와 동일)
예제) MouseDrag(LBUTTON, 100, 100, 0.5 200, 200, 2.0) -- 인식 대상 창 기준 (100, 100) 0.5초간 누름 -> (200, 200) 좌표로 드래그하여 2초 후 해제
-- 키보드 입력을 수행합니다.
Keybd(string text)
Keybd(string text, speed, type)
-- speed: FASTEST|FASTER|NORMAL|SLOWER|SLOWEST -- 속도
-- type: MKEVENT|MESSAGE -- 방식 (활성,비활성)
예제) Keybd('<Ctrl_Press>v<Ctrl_Release>', FASTER, MKEVENT) -- Ctrl+v를 활성방식 입력
Keybd('<Left_Press><Delay_500>1<Delay_500><Left_Release>') -- Left+1
ret = SetImageROI(string imagename, int[] roi)
예제) roi = {0, 0, 1280, 720} -- {x, y, w, h}
SetImageROI('이미지001', roi)
-- 이미지의 ROI를 가져옵니다.
roi = GetImageROI(string imagename)
예제) -- 화면 중심부근에 '소원나무'가 없으면 화면 전체에서 '소원나무'를 찾아서 '드래그'하는 예제입니다.
ret = ImageSearch('소원나무')
if(ret == 0) then
roi_old = GetImageROI('소원나무')
roi_new = {0, 0, 1280, 720} -- {x, y, w, h}
SetImageROI('소원나무', roi_new) -- 인식 범위를 넓혀서 다시 Search
ret, acc, ix, iy = ImageSearch('소원나무')
if(ret == 1) then
Mouse(LBUTTON, DRAG, ix, iy, 1280/2, 720/2) -- 소원나무를 화면 중앙으로 드래그
end
SetImageROI('소원나무', roi_old) -- 기존 인식 범위로 복구
end
-- n초간 사운드 파일(wav)을 재생합니다.
PlaySound(string wavfilename, int alarmsec)
-- 카톡 n번째(1번째방 index=0) 채팅방에 텍스트 또는 스크린샷을 전송합니다.
SendKakaoTalk(uint chatroomindex, string text, bool screenshot)
예제) SendKakaoTalk(0, '보스', false) -- 카톡 첫번째 상단고정 채팅방에 '보스' 텍스트 전송
SendKakaoTalk(0, '', true) -- 카톡 첫번째 상단고정 채팅방에 스크린샷 전송
-- 열려있는 카톡 채팅방에 텍스트 또는 스크린샷을 비활성 전송합니다.
(채팅창을 열어놓고 최소화 후 사용 가능)
SendKakaoTalk(string name, string text, bool screenshot)
예제) SendKakaoTalk('준영', '보스', false) -- 열려있는 '준영' 채팅방에 '보스' 텍스트 전송
SendKakaoTalk('준영', '', true) -- 열려있는 '준영' 채팅방에 스크린샷 전송
-- 텔레그램을 전송합니다.(텍스트 및 사진 첨부 가능)
SendTelegram(string token, string chat_id, string text, string photo_path)
-- 디스코드를 전송합니다.(텍스트 및 사진 첨부 가능)
SendDiscord(string webhook_url, string name, string text, string photo_path)
-- 인식 대상 창의 현재 화면을 스크린샷(png)으로 저장합니다.
filepath = SaveScreenshot() -- 화면 전체
SaveScreenshot(int[] roi)
SaveScreenshot(int x, int y, int w, int h)
SaveScreenshot(string filename)
SaveScreenshot(string filename, int x, int y, int w, int h)
-- 리턴값: 저장된 스크린샷 파일 경로
예제) filepath = SaveScreenshot() -- 화면 전체 스샷
SendTelegram(token, chat_id, "", filepath) -- 스샷 파일을 텔레그램으로 전송
-- 스크린샷(png) 파일을 저장할 경로를 지정합니다.
(한번 지정된 경로는 프로그램 종료시까지 유지되며, 경로를 지정하지 않으면
기본경로 "문서\Screenshot\스크립트명\날짜" 폴더에 저장됩니다.)
SetScreenshotDir(string dirpath)
예제1) SetScreenshotDir('D:\\Screenshot')
SaveScreenshot('test.png') -- 스크린샷을 'D:\\Screenshot\\test.png' 파일로 저장
예제2) SetScreenshotDir('../screenshot') -- 스크린샷을 '스크립트명/screenshot' 경로로 지정
SaveScreenshot() -- 스크린샷을 '스크립트명/screenshot/현재날짜_시간.png' 파일로 저장
참고) lua 스크립트의 현재 디렉토리(./)는 '스크립트명/action'
-- 프로그램을 Stop 상태로 만듭니다.
Stop()
-- Stop 상태인지 여부를 묻습니다.
ret = IsStop()
-- Pause 상태인지 여부를 묻습니다.
ret = IsPause()
-- PreScript를 재실행합니다.
ReloadPreScript()
-- 다른 스크립트를 열고 실행합니다.
OpenScript(string scriptname)
예제) OpenScript('LD플레이어재실행')
-- 메모리(이미지) 버퍼를 생성합니다.
bits = NewBits(int w, int h)
-- 리턴값: 메모리 시작 주소값
-- 메모리(이미지) 버퍼를 삭제합니다.
ReleaseBits(ulong bits)
-- 인식 대상 창의 특정 영역을 캡처하여 메모리 버퍼에 저장합니다.
CaptureScreen(ulong bits, int[] roi)
CaptureScreen(ulong bits, int x, int y, int w, int h)
예제) roi = {100, 100, 50, 50}
CaptureScreen(bits, roi)
-- 메모리 버퍼를 이미지 파일(png)로 저장합니다.
SaveImageFile(ulong bits, int w, int h)
예제) filepath = SaveImageFile(bits, roi[3], roi[4])
-- 인식 대상 창의 특정 영역을 메모리 버퍼와 비교합니다.
acc, fx, fy = BitsSearch( { ulong bits, int w, int h } , int[] roi )
-- arg1: 메모리 버퍼 {bits, w, h} table (주의: bits, w, h - key 고정)
-- arg2: 인식 대상창 {x, y, w, h} table
-- 리턴값: 유사도, 찾은 위치 시작좌표 x, y
예제) centerframe = {bits=nil, w=100, h=100}
centerframe.bits = NewBits(centerframe.w, centerframe.h)
roi = {600, 300, 100, 100}
CaptureScreen(centerframe.bits, roi)
Sleep(2000)
acc, fx, fy = BitsSearch(centerframe, roi) -- 2초전 캡처된 centerframe을 현재 roi 영역과 비교합니다
print('acc, fx, fy = '..acc, fx, fy)
ReleaseBits(centerframe.bits)
centerframe.bits = nil
-- 특정 윈도우의 핸들 값을 가져옵니다.
hwnd = FindWindow(string classname, string windowname)
-- 리턴값: 찾은 창 핸들
예제) hwnd = FindWindow('LDMultiPlayerMainFrame', 'LDMultiPlayer')
-- 특정 윈도우에 포함된 자식 윈도우의 핸들 값을 가져옵니다.
hwnd = FindWindowEx(HWND hwndParent, HWND hwndChildAfter, string classname, string windowname)
-- 리턴값: 찾은 자식 창 핸들
-- 특정 윈도우에 지정된 메시지를 보냅니다.
SendMessage(HWND hwnd, uint msg, uint wParam, uint lParam)
예제) local WM_CLOSE = 0x0010
SendMessage(hwnd, WM_CLOSE, 0, 0)
-- 특정 윈도우의 메시지큐에 지정된 메시지를 보냅니다.
PostMessage(HWND hwnd, uint msg, uint wParam, uint lParam)
예제) local WM_LBUTTONDOWN = 0x0201
PostMessage(hwnd, WM_LBUTTONDOWN, 0, 0)
-- 특정 윈도우를 활성화 시킵니다.
ActivateWindow(HWND hwnd, bool focus)
예제) hwnd = FindWindow('Notepad', '제목 없음 - Windows 메모장')
ActivateWindow(hwnd, true)
-- 특정 윈도우의 위치와 크기를 변경합니다.
MoveWindow(HWND hwnd, int x, int y, int w, int h)
예제) hwnd = FindWindow('Notepad', '제목 없음 - Windows 메모장')
MoveWindow(hwnd, 0, 0, 800, 500)
-- 인식 대상 창의 이름을 가져옵니다.
tw_name = GetTargetWindowName()
print('tw_name: '..tw_name)
-- 인식 대상 창의 핸들을 가져옵니다.
tw_handle = GetTargetWindowHandle()
print('tw_handle: '..string.format('0x%X', tw_handle))
(참고: 대상 창의 최상위 윈도우 핸들을 반환하는 함수는 GetTargetFrameHandle로 변경되었습니다.)
-- 인식 대상 창의 최상위 핸들을 가져옵니다.
tw_handle = GetTargetFrameHandle()
print('tf_handle: '..string.format('0x%X', tf_handle))
-- 인식 대상 창의 위치를 가져옵니다.
x, y, w, h = GetTargetWindowPos()
print('tw pos: '..x, y, w, h)
-- 인식 대상 창의 최상위 윈도우 위치를 가져옵니다.
x, y, w, h = GetTargetFramePos()
print('tf pos: '..x, y, w, h)
-- 특정 상황에서 '인식 대상 창 크기가 변경되는 경우' 이벤트 핸들러 함수를 정의할 수 있습니다.
Lua 스크립트에 OnTargetWindowSizeChanged 함수가 정의된 경우 호출되고
'인식 대상 창 크기 변경됨' 팝업창이 뜨지 않습니다.
예제)
function OnTargetWindowSizeChanged()
print('인식 대상 창 크기 변경됨')
x, y, w, h = GetTargetWindowPos()
print('target window pos: '..x, y, w, h)
if(w < 600) then
OpenScript('세로화면540x960')
end
end
-- 특정 상황에서 '인식 대상 창이 없어지는 경우' 이벤트 핸들러 함수를 정의할 수 있습니다.
Lua 스크립트에 OnTargetWindowNotFound 함수가 정의된 경우 호출되고
프로그램이 Stop 되지 않습니다.
예제)
function OnTargetWindowNotFound()
print('인식 대상 창 없음')
OpenScript('재실행')
end
-- 클립보드에 저장된 텍스트를 가져옵니다.
text = GetClipboardData()
-- 클립보드에 텍스트를 저장합니다.
ret = SetClipboardData(string text, bool unicode)
-- 현재 커서 (인식 대상 창 기준) 위치를 가져옵니다.
x, y = GetCursorPos()
-- (인식 대상 창 기준) x, y 좌표의 R,G,B값 또는 Int값을 가져옵니다.
r,g,b = GetPixelRGB(int x, int y)
color = GetPixelInt(int x, int y)
-- 이미지서치의 결과를 테이블 형식으로 가져옵니다. (찾은 위치를 모두 저장)
result_count, result_table = ImageSearchMultipleResults(string imagename, SORT_PTDIST, int[] ptCenter)
-- 리턴값: 결과 개수, 결과값 테이블 {필드명: acc, ix, iy, sx, sy}
-- arg1: 이미지이름 또는 이미지이름 테이블 {'이미지001', '이미지002'}
-- arg2: 결과값 정렬기준(SORT_PTDIST|SORT_ACC|SORT_COORD) - ptCenter거리순, acc유사도순, x,y좌표순
-- ptCenter: SORT_PTDIST 정렬시 기준 위치
예제1) '이미지001'에 해당하는 모든 위치를 테이블에 저장합니다.
result_count, result_table = ImageSearchMultipleResults('이미지001')
예제2) 결과값 저장시 x:100, y:100 좌표에 가까운 거리순으로 정렬합니다.
result_count, result_table = ImageSearchMultipleResults('이미지001', SORT_PTDIST, {100, 100})
테스트예제) 결과값이 저장된 위치에 순서대로 마우스 포인터를 이동합니다.
for i = 1, result_count do
print('result_table field: '..i, result_table[i].acc, result_table[i].ix, result_table[i].iy, result_table[i].sx, result_table[i].sy)
Mouse(LBUTTON, MOVE, result_table[i].ix, result_table[i].iy, 0, 0, 0, 0, 0.5, 1, FASTER, MKEVENT)
end
-- 특정 이미지에 대한 핫키를 등록합니다.
RegisterHotKey(string imagename, string hotkey, bool available_in_stop)
전처리 스크립트(PreScript)에 등록시 오토핫키로 활용 가능
예제) -- Ctrl+1을 누르면 이미지001 인식 후 액션 수행 (stop시에도 사용)
RegisterHotKey('이미지001', '<Ctrl>1', true)
-- Shift + 좌클릭시 이미지002 인식 후 액션 수행 (stop시 사용 안함)
RegisterHotKey('이미지002', '<Shift><LButton>', false)
-- 특정 이미지에 대한 핫키를 해제합니다.
UnregisterHotKey(string imagename)
-- lua 스크립트에 대한 핫키를 등록합니다.
RegisterScriptHotKey(string script_code, string hotkey, bool available_in_stop)
예제) -- Ctrl+R을 눌러 PreScript Reload (사용자 GUI 제작시 활용)
RegisterScriptHotKey('ReloadPreScript()', '<Ctrl>R', true)
-- 현재 순서의 이미지 이름을 가져옵니다.
imagename = GetCurImageName()
-- 실행중인 이미지맥스의 버전을 가져옵니다.
im_ver = GetIMVer()
-- ini 폴더의 ini_filename에 값을 저장합니다. (내부적으로 WritePrivateProfileString 호출)
IniSetValue(string app, string key, string value, string ini_filename)
-- app: key가 속해있는 section
-- key, value: 해당 key에 value를 저장
-- ini_filename: ini 폴더의 filename
-- ini 폴더의 ini_filename에서 값을 가져옵니다. (내부적으로 GetPrivateProfileString 호출)
value = IniGetValue(string app, string key, string ini_filename)
-- app: key가 속해있는 section
-- key, value: 해당 key에서 value를 가져옴(문자열)
-- ini_filename: ini 폴더의 filename
-- 두 점 사이 거리를 구합니다.
dist = GetDist(double x1, double y1, double x2, double y2)
-- 두 점 사이 각도를 구합니다.
degree = GetDegree(double x1, double y1, double x2, double y2)
예제) dist = GetDist(100, 100, 200, 200)
degree = GetDegree(100, 100, 200, 200)
print('거리, 각도: '..dist, degree)
-- 출력결과) 거리, 각도: 141, 135
-- 특정 각도로 길이만큼 떨어진 점을 구합니다.
dx, dy = GetDeltaPoint(double degree, double length)
예제) dx, dy = GetDeltaPoint(degree, 75) -- degree:패드방향, 75:패드반지름
MouseDrag(LBUTTON, 145, 427, 0.5, 145+dx, 427+dy, 2.0) -- 2초간 degree방향으로 패드이동
-- 랜덤한 문자열을 구합니다.
rand_str = GetRandString(int len, bool allow_num)
-- len: 문자열 자리수
-- allow_num: 숫자 허용
예제) rand_str = GetRandString(5, true)
print('랜덤문자: '..rand_str)
-- 출력결과) 랜덤문자: czp3e
<< 이벤트 핸들러 함수 >>
-- STOP 버튼을 누르거나 STOP 이벤트 발생시 호출됩니다.
function OnStop(is_user)
print('Stop is_user: '..is_user) -- 사용자가 STOP 버튼을 눌른 경우 1
end
-- PAUSE 버튼을 누를시 호출됩니다.
function OnPause(is_pause)
print('Pause: '..is_pause)
end
-- 프로그램 종료시 호출됩니다.
function OnDestroy()
print('Destroy')
end
-- 사용자 GUI 설정파일 Open시 호출됩니다.
function OnOpenIni()
print('OpenIni')
end
-- 사용자 GUI 설정파일 Save시 호출됩니다.
function OnSaveIni()
print('SaveIni')
end
-- 사용자 GUI 설정파일 New시 호출됩니다.
function OnNewIni()
print('NewIni')
end
<< 사용자 GUI 함수 >>
-- 사용자 탭을 추가합니다.
-- tabname: 추가할 탭이름
-- ini_section: ini에 저장되는 섹션명 (nil이면 탭이름으로 저장)
GUIAddTab(string tabname, string ini_section)
-- GUI item을 추가할 탭을 지정합니다.
GUISetCurTab(string tabname)
-- 텍스트를 추가합니다.
-- x: 추가할 텍스트의 x좌표(0~360)
-- y: 추가할 텍스트의 y좌표(0~320)
-- w: 추가할 텍스트의 너비(-1이면 자동)
-- h: 추가할 텍스트의 높이(-1이면 자동)
-- text: 텍스트 내용
-- 리턴값: GUI item id
item_id = GUIAddText(int x, int y, int w, int h, string text)
-- 그룹박스를 추가합니다.
-- x, y, w, h, text, 리턴값: 상동
GUIAddGroup(int x, int y, int w, int h, string text)
-- 버튼을 추가합니다.
-- func: 버튼을 누르면 lua 스크립트에 정의된 func(함수)를 호출합니다.
GUIAddButton(int x, int y, int w, int h, string text, string func)
-- 체크박스를 추가합니다.
-- var: 체크박스에 체크시 var(변수)는 1이 됩니다. (체크 해제시 0)
GUIAddCheck(int x, int y, int w, int h, string text, string func, string var)
-- 라디오버튼을 추가합니다.
-- var: 버튼 선택시 var(변수)는 라디오버튼의 index가 됩니다. (0, 1, 2..)
(주의: 라디오버튼 그룹의 첫번째 버튼에만 var(변수)를 지정해야 합니다.)
GUIAddRadio(int x, int y, int w, int h, string text, string func, string var)
-- 콤보박스를 추가합니다.
-- text_table: 콤보박스에 추가할 텍스트 항목들
-- var: 항목 선택시 var(변수)는 콤보박스 항목의 index가 됩니다. (0, 1, 2..)
GUIAddCombo(int x, int y, int w, int h, string[] text_table, string func, string var)
-- 에디트박스를 추가합니다.
-- var: 에디트박스에 작성한 내용이 var(변수)에 저장됩니다.
GUIAddEdit(int x, int y, int w, int h, string text, string func, string var)
-- 현재까지 추가된 컨트롤을 윈도우에 보여줍니다.
GUIShow()
-- id에 해당하는 GUI item을 숨기거나 보여줍니다.
GUIItemShow(int id, bool show)
예제) -- 버튼1을 추가 후 숨김
btn1_id = GUIAddButton(10, 50, -1, -1, '버튼1', 'onButton1')
GUIItemShow(btn1_id, false)
-- id에 해당하는 GUI item을 활성 또는 비활성 상태로 만듭니다.
GUIItemEnable(int id, bool enable)
-- id에 해당하는 GUI item의 상태를 강제로 수정합니다.
GUIItemUpdate(int id, int value)
GUIItemUpdate(int id, string value)
-- GUIItemUpdate 이후 사용자 GUI를 갱신합니다.
GUIUpdate()
예제) 스크립트에서 UI 상태를 수정 후 화면 갱신
function onButton1(btn_id)
var_combo1 = 1
GUIItemUpdate(combo1_id, var_combo1) -- 버튼1을 누르면 combo1_id에 해당하는 UI 상태 변경
GUIUpdate() -- 수정된 값으로 화면 업데이트
end
comboText = {'선택1', '선택2', '선택3'}
combo1_id = GUIAddCombo(10, 170, -1, -1, comboText, 'onCombo1', 'var_combo1')
GUIAddButton(10, 50, -1, -1, '버튼1', 'onButton1')
-- id에 해당하는 콤보박스의 index(0,1,2)에 해당하는 항목 문자열을 가져옵니다.
string value = GUIComboGetText(int id, int index)
-- id에 해당하는 콤보박스의 텍스트 항목들을 재설정합니다.
GUIComboSetContent(int id, string[] text_table)
-- 사용자 GUI의 현재 설정 파일 이름을 가져옵니다.
string ini_name = GUIGetCurIniName()
-- 대화상자(팝업창)를 생성합니다.
-- dlgname: 추가할 대화상자 이름
-- ini_section: ini에 저장되는 섹션명
-- w, h: 대화상자 너비, 높이
-- 리턴값: GUI item id
dlg_id = GUIAddDialog(string dlgname, string ini_section, int w, int h)
-- id에 해당하는 대화상자에 해당 GUI item을 추가합니다.
-- parent_id: 대화상자 item id
-- x, y, w, h, text, func, var, 리턴값: 상동
GUIAddText(int parent_id, int x, int y, int w, int h, string text)
GUIAddGroup(int parent_id, int x, int y, int w, int h, string text)
GUIAddButton(int parent_id, int x, int y, int w, int h, string text, string func)
GUIAddCheck(int parent_id, int x, int y, int w, int h, string text, string func, string var)
GUIAddRadio(int parent_id, int x, int y, int w, int h, string text, string func, string var)
GUIAddCombo(int parent_id, int x, int y, int w, int h, string[] text_table, string func, string var)
GUIAddEdit(int parent_id, int x, int y, int w, int h, string text, string func, string var)
GUIAddPicture(int parent_id, int x, int y, int w, int h, string photo_path)
GUIAddLink(int parent_id, int x, int y, int w, int h, string text, string url)
참고) 대화상자(Dialog)의 사용자 설정값을
저장하려면 IniSetValue, 가져오려면 IniGetValue 함수를 사용하셔야 합니다.
-- id에 해당하는 대화상자를 열거나 닫습니다.
GUIItemShow(int id, bool show, bool is_dlg_cancel)
예제) 대화상자 생성 후 열기 및 닫기
dlg_id = GUIAddDialog('대화상자', '옵션', 300, 200) -- 대화상자 생성
GUIAddButton(dlg_id, 10, 50, -1, -1, '버튼1', 'onButton1')
GUIItemShow(dlg_id, true) -- 대화상자(팝업창) 열기
GUIItemShow(dlg_id, false) -- 대화상자(팝업창) 닫기(확인 버튼 누른 경우)
GUIItemShow(dlg_id, false, true) -- 대화상자(팝업창) 닫기(취소 버튼 누른 경우)
-- 메시지 박스를 띄웁니다.
주의) 이미지맥스 쓰레드가 중지되므로 GUI 함수내에서만 사용 권장
MessageBox(string msg)
<< 사용자 GUI 샘플 코드 >>
-- 전처리 스크립트(PreScript)에 등록 후 사용
function onButton1(btn_id)
print('Button1')
end
function onCheck1(check_id)
print('check1: '..check1)
end
function onRadio1(radio_id)
print('radio1: '..radio1)
end
function onCombo1(combo_id)
print('combo1: '..combo1)
end
function onEdit1(edit_id)
print('edit1: '..edit1)
end
GUIAddTab('사용자')
GUISetCurTab('사용자')
GUIAddText(10, 10, -1, -1, '텍스트')
GUIAddButton(10, 50, -1, -1, '버튼', 'onButton1')
GUIAddCheck(10, 90, -1, -1, '체크', 'onCheck1', 'check1')
GUIAddRadio(10, 130, -1, -1, '선택1', 'onRadio1', 'radio1') -- 첫번째 라디오버튼에만 var지정
GUIAddRadio(70, 130, -1, -1, '선택2', 'onRadio1')
GUIAddRadio(130, 130, -1, -1, '선택3', 'onRadio1')
comboText = {'선택1', '선택2', '선택3'};
GUIAddCombo(10, 170, -1, -1, comboText, 'onCombo1', 'combo1')
GUIAddEdit(10, 210, -1, -1, '편집', 'onEdit1', 'edit1')
GUIShow()
GUISetCurTab('사용자')
사용자 GUI 샘플코드 실행화면