ex13_debug2_fLib_e_ready.zip



/*

##############################################

예제 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)

}


반응형

+ Recent posts