컴퓨터&매크로/오토핫키_중급

[스크립트]파일관리기

릭나스 2014. 11. 11. 22:17
반응형

#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 = 0xffff, 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", 0x0101) ; 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

}

728x90