/*
##############################################
예제 12 debug2 fLib_e()
outputdebug 를 이용한 log 출력시 debugview.exe 프로그램에
다른 로그도 함께 나와서 사용하기 불편하다.
그래서,
autohotkey listview 를 이용해서 자체 log 창을 만들었다.
library화 해서 언제든지 호출하여 사용하도록 만들었다.
사용번:
fLib.ahk 를 autohotkey.exe 파일과 같은 위치의 lib 폴더에 복사한다.
내 스크립트에서
fLib_e("로그 추가") ; 로그 추가
fLib_LogShow() ; 로그 gui 보이도록한다.
fLib_LogHide() ; 로그 gui 숨긴다.
fLib_LogDisable() ; 로그 gui를 destroy하고, 더이상 로그가 추가되지 않도록한다.
fLib_LogEnable() ; disable된 log를 다시 enable 시킨다.
###############################################
*/
#SingleInstance, force ;이 스크립트는 동시에 한개만 실행되도록 한다. 이미 동작중이면 kill 하고 다시 실행한다.
#noenv ;변수가 window 환경변수값인지 체크하지 않는다. 속도 향상
SetBatchLines, -1 ;라인간 딜레이 없음. 속도향상
SetWorkingDir, %A_ScriptDir% ;스크립트가 있는 폴더를 실행폴더로 설정합니다.
;image파일 이름만 있는경우, 현재 실행 폴더에서 이미지 파일을 찾습니다.
fLib_e("script 시작")
변수:=1
G1=kkkkk
gui, 1:+resize
Gui, 1:Add, Button,ggGui1 vvGuiB1,outputdebug 로그 보기
Gui, 1:Add, Button,ggGui1 vvGuiB2,메세지 박스로 보기
Gui, 1:Add, Button,ggGui1 vvGuiB3,변수 값 보기
Gui, 1:Add, Button,ggGui1 vvGuiB4,최근 실행줄 보기
Gui, 1:Add, Button,ggGui1 vvGuiB5,flib_e 로그 추가
Gui, 1:Add, Button,ggGui1 vvGuiB6,로그 보이기 ;로그창 보이기
Gui, 1:Add, Button,ggGui1 vvGuiB7,로그 숨기기 ;로그창 숨기기 로그는 계속 수집됨.
Gui, 1:Add, Button,ggGui1 vvGuiB8,로그 enable ;로그 기능 켜기
Gui, 1:Add, Button,ggGui1 vvGuiB9,로그 disable ;로그 기능 끄기 로그 수집안됨.
Gui, 1:show
;fLib_logdisable() ;kcmt.rel 이 함수를 사용하면 이 fLib_e() 모두 무시 된다.
fLib_LogShow()
flib_e(G1)
flib_e("G1:" G1 "변수:" 변수)
flib_e("G1:" G1,"변수:" 변수)
flib_e(,변수)
flib_e("자동실행영영끝")
;msgbox 프로그램 시작시 기본 실행되는 영역(최초 return 만날때까지) ; msgbox 로 debugging
return
; 이다음부터 나오는 label ,hotkey, functinos 는 호출해야지 실행됩니다.
gGui1:
if(A_GuiControl ="vGuiB1")
gosub L_showOutputDebug
else if(A_GuiControl ="vGuiB2")
gosub L_showMsgBox
else if(A_GuiControl ="vGuiB3")
gosub L_showListVars
else if(A_GuiControl ="vGuiB4")
gosub L_showListLines
else if(A_GuiControl ="vGuiB5")
gosub L_addfLib_log
else if(A_GuiControl ="vGuiB6")
fLib_logshow()
else if(A_GuiControl ="vGuiB7")
fLib_loghide()
else if(A_GuiControl ="vGuiB8")
fLib_logenable()
else if(A_GuiControl ="vGuiB9")
fLib_logdisable()
return
L_addfLib_log:
count++
fLib_e(count)
return
L_showListLines:
ListLines
pause
return
L_showListVars:
ListVars
return
L_showOutputDebug:
loop,3
{
outputdebug %A_Index% 프로그램 흐름에 방해하지 않고 같을 확인한다.
}
return
L_showMsgBox:
loop,3
{
msgbox %A_Index% 프로그램을 중지시키고 값을 확인하기 용이 하다.
}
return
guiclose:
exitapp
#include fLIb.ahk
fLib_LogCreateGui()
{
Global
if(Gv_fLib_Log_Enable=0) ; 명시적으로 끌때만 off,
return
if(A_IsCompiled)
return
tprevGuiNum := A_Gui
Gv_LogWinCreated:=1
Gui, 97:New,HwndLogMainWin
Gui, 97:+Caption +Border +resize +LastFound
Gui, 97:Add, Button, x0 vvGui97B_Clear ggGui97B_Clear, Clear
Gui, 97:Add, CheckBox, x+5 yp+3 ggGui97CB_AOT,AOT
Gui, 97:Add, CheckBox,x+5 yp vvGui97CB_AutoScroll checked, AutoScroll
Gui, 97:Add, CheckBox,x+5 yp vvGui97CB_UTF82Ansi,UTF8
Gui, 97:Add, Text,x+10 yp+3 vvGui97T_MaxNumLog ,Max
Gui, 97:Add, Edit,x+5 yp-3 vvGui97E_MaxNumLog w50 Number,50000
Gui, 97:Add, ListView, y+20 vvGui97LV_Log HwndHwndGui97LV_Log h300 x10 HScroll altsubmit checked report,time|Log1|log2|log3
Gui, 97:Default
Gui, 97:ListView, vGui97LV_Main
Gui, 97:show,hide x0 y0 autosize,%A_ScriptName%-log
;WinGet,HwndLogMainWin,ID
LV_Modifycol(1,110)
LV_Modifycol(2,200)
; Gui, 1:Default
if (tprevGuiNum = "" or tprevGuiNum = 97)
tprevGuiNum = 1
Gui, %tprevGuiNum%:Default
}
gGui97CB_AOT:
tprevGuiNum := A_Gui
Gui,97:default
WinSet,AlwaysOnTop,toggle,ahk_id %HwndLogMainWin%
if (tprevGuiNum = "" or tprevGuiNum = 97)
tprevGuiNum = 1
Gui, %tprevGuiNum%:Default
return
gGui97B_Clear:
tprevGuiNum := A_Gui
Gui, 97:default
Gui, 97:Listview,vGui97LV_Main
LV_Delete()
if (tprevGuiNum = "" or tprevGuiNum = 97)
tprevGuiNum = 1
Gui, %tprevGuiNum%:Default
return
97GuiSize:
tprevGuiNum := A_Gui
Gui,97:default
GuiControlGet, vGui97LV_Log, Pos
; GuiControl, Move, vGuiLV_Main , % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - vGuiLV_MainY-5)
if A_OSVersion = WIN_XP
GuiControl, 97:Move, vGui97LV_Log , % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - vGui97LV_LogY - 0)
else
GuiControl, 97:Move, vGui97LV_Log , % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - vGui97LV_LogY - 0)
; Gui, 1:Default
if (tprevGuiNum = "" or tprevGuiNum = 97)
tprevGuiNum = 1
Gui, %tprevGuiNum%:Default
return
fLib_LogShow()
{
Global
if(A_IsCompiled)
return
if(Gv_fLib_Log_Enable=0)
return
tprevGuiNum := A_Gui
if Gv_LogWinCreated <> 1
fLib_LogCreateGui()
Gui, 97:Default
Gui, 97:show , NoActivate
if (tprevGuiNum = "" or tprevGuiNum = 97)
tprevGuiNum = 1
Gui, %tprevGuiNum%:Default
sleep, 100
; msgbox preGui : %tprevGuiNum%
}
fLib_LogHide(){
Gui, 97:hide
}
fLib_LogEnable()
{
Global
Gv_fLib_Log_Enable := 1
}
fLib_LogDisable()
{
Global
Gv_fLib_Log_Enable := 0
Gv_LogWinCreated := 0
Gui, 97:destroy
}
fLib_LogEnableFile()
{
Global
Gv_fLib_Log_Enable_File := 1
}
fLib_LogDisableFile()
{
Global
Gv_fLib_Log_Enable_File := 0
}
fLib_e(aLog="",aLog2="")
{
Global
if(A_IsCompiled)
return
if(Gv_fLib_Log_Enable=0)
return
tprevGuiNum := A_Gui
FormatTime, tlogtime,, HH:mm:ss
tlogtime := tlogtime "." A_MSec
FormatTime, tlogtime2,,(yy-MM-dd)
tlogtime := tlogtime " " tlogtime2
if Gv_LogWinCreated <> 1
fLib_LogCreateGui()
Gui, 97:default
Gui, 97:Listview,vGui97LV_Main
Gui, 97:submit, nohide
tlvCnt:=LV_GetCount()
if tlvCnt > %vGui97E_MaxNumLog%
LV_Delete()
if vGui97CB_UTF82Ansi = 1
aLog:=fLIb_UTF82Ansi(aLog)
LV_Add("",tlogtime,aLog,aLog2)
outputdebug [%A_ScriptName%] %aLog% %aLog2%
if(Gv_fLib_Log_Enable_File)
{
tt := tlogtime " " aLog " " alog2
fLib_LogToFile(tt)
}
if vGui97CB_AutoScroll = 1
LV_Modify(tlvCnt+1,"Vis")
if (tprevGuiNum = "" or tprevGuiNum=97)
tprevGuiNum = 1
Gui, %tprevGuiNum%:Default
;fLib_LogShow()
}
fLib_LogToFile(aLog="")
{
Global
if(Gv_fLIb_Log_FileName == "")
{
FormatTime, LogNowTime,,yyMMdd-HHmmss
Gv_fLIb_Log_FileName = %A_ScriptDir%\Log\%LogNowTime%.log
ifnotexist,%A_ScriptDir%\Log
FileCreateDir, %A_ScriptDir%\Log
tprefix=
(Ltrim
[Info]
Title=%A_ScriptName%
Time=%LogNowTime%
)
FileAppend,%tprefix%`n,%Gv_fLIb_Log_FileName%
} else {
FileAppend,%aLog%`n,%Gv_fLIb_Log_FileName%
}
}
fLib_Logadd(aLog="",aLog2="")
{
Global
if( Gv_loglevel = 0)
return
if(Gv_fLib_Log_Enable=0)
{
outputdebug %A_ThisFunc%-%aLog%-%aLog2%
return
}
tprevGuiNum := A_Gui
FormatTime, tlogtime,, HH:mm:ss
tlogtime := tlogtime "." A_MSec
FormatTime, tlogtime2,,(yy-MM-dd)
tlogtime := tlogtime " " tlogtime2
if Gv_LogWinCreated <> 1
fLib_LogCreateGui()
Gui, 97:default
Gui, 97:Listview,vGui97LV_Main
Gui, 97:submit, nohide
tlvCnt:=LV_GetCount()
if tlvCnt > %vGui97E_MaxNumLog%
LV_Delete()
if vGui97CB_UTF82Ansi = 1
aLog:=fLIb_UTF82Ansi(aLog)
loop,parse, aLog, `n, `r
{
LV_Add("",tlogtime,a_loopfield,alog2)
}
outputdebug %A_ThisFunc%-%aLog%-%tprevGuiNum%
if vGui97CB_AutoScroll = 1
LV_Modify(tlvCnt+1,"Vis")
if (tprevGuiNum = "" or tprevGuiNum=97)
tprevGuiNum = 1
Gui, %tprevGuiNum%:Default
}
fLib_LogaddForce(aLog="",aLog2="")
{
fLib_e(aLog,aLog2)
}
;aLevel=0 nolog
;aLevel=1 info 항상 출력
;aLevel=2 debug 용 출력
fLib_Log(aLevel=1,aStr="")
{
Global Gv_loglevel
if( Gv_loglevel = 0)
return
else if ( Gv_loglevel = 1)
{
if(aLevel = 1)
outputdebug %aStr%
return
}
else if ( Gv_loglevel = 2)
{
outputdebug %aStr%
}
}
fLIb_Ansi2UTF8(sString)
{
fLib_Ansi2Unicode(sString, wString, 0)
fLib_Unicode2Ansi(wString, zString, 65001)
Return zString
}
fLIb_UTF82Ansi(zString)
{
fLib_Ansi2Unicode(zString, wString, 65001)
fLib_Unicode2Ansi(wString, sString, 0)
Return sString
}
fLib_Ansi2Unicode(ByRef sString, ByRef wString, CP = 0)
{
nSize := DllCall("MultiByteToWideChar"
, "Uint", CP
, "Uint", 0
, "Uint", &sString
, "int", -1
, "Uint", 0
, "int", 0)
VarSetCapacity(wString, nSize * 2)
DllCall("MultiByteToWideChar"
, "Uint", CP
, "Uint", 0
, "Uint", &sString
, "int", -1
, "Uint", &wString
, "int", nSize)
}
fLib_Unicode2Ansi(ByRef wString, ByRef sString, CP = 0)
{
nSize := DllCall("WideCharToMultiByte"
, "Uint", CP
, "Uint", 0
, "Uint", &wString
, "int", -1
, "Uint", 0
, "int", 0
, "Uint", 0
, "Uint", 0)
VarSetCapacity(sString, nSize)
DllCall("WideCharToMultiByte"
, "Uint", CP
, "Uint", 0
, "Uint", &wString
, "int", -1
, "str", sString
, "int", nSize
, "Uint", 0
, "Uint", 0)
}
'Autohotkey > AutoHotKey강좌' 카테고리의 다른 글
예제-14 debug3 , 로그 파일로 남기기 (3) | 2016.06.13 |
---|---|
예제 12 - autohotkey debug 방법 (0) | 2016.06.11 |
11 autohotkey gui control 위치 조절 (0) | 2016.06.10 |