뭐 더이상 무슨 말이 필요하겠습니까만. 명령어에 대한 간략한 정보를 알아보고 넘어가겠습니다.
자세한 명령어는 해당 명령어를 선택해서 보시기 바랍니다.
님투 파일관리기 프로그램 하나 만들어 보았습니다. 아래 프로그램을 다운 받아서 실행하시던지 아래 소스를 직접 실행하던지 편한데로 프로그램이 어떻게 동작하는지 보시기 바랍니다.
접기
#SingleInstance force ; 같은 스크립트의 다중 프로세스로 실행의 금지/허가설정
#NoTrayIcon ; 프로그램이 트레이로 들어가지 않도록
#NoEnv ; 변수명을 해석할 때, 환경 변수를 무시한다
Gui , +Resize +MinSize ; 창크기변화 하게
Gui , Font , s10, Arial ; 폰트 지정
Gui , Add , Edit , x6 y10 w250 h22 vDirSelect, c:/
Gui , Add , Button , x+6 y10 w50 h22 gDirSelectBt, ...
Gui , Add , Button , x+13 w50 h22 gDirSelectView, View
Gui , Add , Edit , x+6 w40 h22 vFileListnum, 40
Gui , Add , Edit , x+6 w70 h22 vFileListType, *.*
Gui , Add , CheckBox , x+6 w120 h20 vSubFileall, 서브모두
Gui , Add , ListView , x0 y40 r20 w700 vDirFilelist glistClick, N|Name|Size|Modified|FullPath
Gui , Show , w700 h403,님투 파일관리기
Return
;--------------------------------------------
; 폴더 선택
;--------------------------------------------
DirSelectBt:
FileSelectFolder , dndir, , 3
if dndir =
{
return
}
GuiControl ,, DirSelect, %dndir%
Return
;--------------------------------------------
; 해당 파일이 실행될 경우
;--------------------------------------------
listClick:
CoordMode ,MOUSE ,RELATIVE
MouseGetPos ,mx,my,oID,oCNN
If (A_GuiEvent = "DoubleClick")
{ Gosub Doubleclick
}
Return
Doubleclick:
Return
;--------------------------------------------
; 선택된 폴더의 파일목록
;--------------------------------------------
DirSelectView:
Gui ,Submit , NoHide
;--------------------------------------------
; 목록 다시 시작
;--------------------------------------------
LV_Delete()
;--------------------------------------------
; 전달 받은 폴더/파일마스크,,서브목록옵션
; Loop, 폴더 : 현재 폴더의 파일만
; Loop, 폴더,, 1 : 서브폴더의 파일전체
;--------------------------------------------
Loop , %DirSelect%\%FileListType%,, %SubFileall%
{
;------------------------------------------
; 지정한 갯수를 출력하고 빠져나온다
; 기본 40 개
;------------------------------------------
If A_Index >%FileListnum%
Break
;------------------------------------------
; 번호|파일명|크기|생성일|패치
; N|Name|Size|Modified|FullPath
;------------------------------------------
LV_Add("", A_Index , A_LoopFileName , A_LoopFileSize , A_LoopFileTimeModified , A_LoopFileLongPath )
}
;--------------------------------------------
; 셀크기 자동화
LV_ModifyCol()
Return
GuiSize :
;--------------------------------------------
; 창크기에 변화가 있을 경우 같이 크기가 변할
; 오브젝트 지정
;--------------------------------------------
Anchor("DirFilelist", "wh")
Return
GuiClose :
;--------------------------------------------
; 이 항목이 없으면 X 로 종료해도 프로세스에서
; 종료되지 않는다.
;--------------------------------------------
ExitApp
;--------------------------------------------
; 크기 자동함수
;--------------------------------------------
Anchor(i, a = "", r = false ) {
static c, cs = 12 , cx = 255 , cl = 0 , g, gs = 8 , z = 0 , k = 0 xffff, gx = 1
If z = 0
VarSetCapacity(g, gs * 99 , 0 ), VarSetCapacity(c, cs * cx, 0 ), z := true
If a =
{
StringLeft , gn, i, 2
If gn contains :
{
StringTrimRight , gn, gn, 1
t = 2
}
StringTrimLeft , i, i, t ? t : 3
If gn is not digit
gn := gx
}
Else gn := A_Gui
If i is not xdigit
{
GuiControlGet , t, Hwnd, %i%
If ErrorLevel = 0
i := t
Else ControlGet , i, Hwnd, , %i%
}
gb := (gn - 1 ) * gs
Loop , %cx%
If (NumGet(c, cb := cs * (A_Index - 1 )) == i) {
If a =
{
cf = 1
Break
}
Else gx := A_Gui
d := NumGet(g, gb), gw := A_GuiWidth - (d >> 16 & k), gh := A_GuiHeight - (d & k), as := 1
, dx := NumGet(c, cb + 4 , "Short"), dy := NumGet(c, cb + 6 , "Short")
, dw := NumGet(c, cb + 8 , "Short"), dh := NumGet(c, cb + 10 , "Short")
Loop , Parse , a, xywh
If A_Index > 1
av := SubStr(a, as, 1 ), as += 1 + StrLen(A_LoopField )
, d%av% += (InStr("yh", av) ? gh : gw) * (A_LoopField + 0 ? A_LoopField : 1 )
DllCall("SetWindowPos", "UInt", i, "Int", 0 , "Int", dx, "Int", dy, "Int", dw, "Int", dh, "Int", 4 )
If r != 0
DllCall("RedrawWindow", "UInt", i, "UInt", 0 , "UInt", 0 , "UInt", 0 x0101) ; RDW_UPDATENOW | RDW_INVALIDATE
Return
}
If cf != 1
cb := cl, cl += cs
If (!NumGet(g, gb)) {
Gui , %gn%:+LastFound
WinGetPos , , , , gh
VarSetCapacity(pwi, 68 , 0 ), DllCall("GetWindowInfo", "UInt", WinExist(), "UInt", &pwi)
, NumPut(((bx := NumGet(pwi, 48 )) << 16 | by := gh - A_GuiHeight - NumGet(pwi, 52 )), g, gb + 4 )
, NumPut(A_GuiWidth << 16 | A_GuiHeight , g, gb)
}
Else d := NumGet(g, gb + 4 ), bx := d >> 16 , by := d & k
ControlGetPos , dx, dy, dw, dh, , ahk_id %i%
If cf = 1
{
Gui , %gn%:+LastFound
WinGetPos , , , gw, gh
d := NumGet(g, gb), dw -= gw - bx * 2 - (d >> 16 ), dh -= gh - by - bx - (d & k)
}
NumPut(i, c, cb), NumPut(dx - bx, c, cb + 4 , "Short"), NumPut(dy - by, c, cb + 6 , "Short")
, NumPut(dw, c, cb + 8 , "Short"), NumPut(dh, c, cb + 10 , "Short")
Return , true
}
접기 소스를 직접 실행시키면서 계속 계속 조금더 조금더 고쳐보도록 해야 합니다. 그래서 완전히 자기 것으로 만들지 않으면 이런 강좌는 아무짝에도 쓸모가 없게 됩니다. 계속 노력해서 자기 것으로 만드세요 ....