ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Autoit을 이용한 다운로드 완료 후 자동종료
    컴퓨터 2009. 10. 26. 23:35
    반응형
    autoit 가지고 노는 재미가 솔솔...

    exit pro나 윈도 자장가 같은 프로그램으로 다운로드 걸어놓거나
    인코딩을 걸어 놓고 완료 후 자동 종료가 되게 해 놓은 경우가 많다..

    일정 시간후 종료는 shutdown 명령어로 충분히 가능하니 

    아쉬운 것은 CPU 사용율이 낮거나 네트워크 다운로드 량이 낮은 경우(다운 완료)
    자동 종료하는 것이다..

    그래서 autoit으로 한번 만들어 보았다...

    WMI를 이용해서 업로드 다운로드 속도를 측정해서 처리할 수도 있다.. 
    게다가 업 다운 속도가 WMI가 훨씬 더 정확하다...

    하지만 autoit의 진정한 묘미는 다른 프로그램을 마음껏 활용할 수 있다는 것이다...

    그래서 다른 프로그램을 이용해 봤다..

    일단 필요한 것은 네트워크 업다운 속도를 측정하는 외부 프로그램....
    NetMonitoring이라는 멋진 프로그램이다.
    일단은 이 프로그램을 활용해 본다..

    ShellExecute("NetMonitoring.exe")
    WinWaitActive("NetMonitoring")

    일단은 이 프로그램을 실행한다..

    Sleep(5000)

    5초 정도 측정할 시간을 벌고

    $flagCount = 0

    종료할 조건이 되는지 알아볼 flag를 먼저 세팅..

    $text = WinGetText("NetMonitoring")

    일단 실행된 프로그램에서 텍스트를 가져온다..
    이 텍스트에는 다음과 같은 내용이 저장되어 있다..
    우리가 필요한 것은 다운로드 속도 부분이다...

    $Array = StringSplit($text,Chr(10),0)

    이렇게 해서 배열에 텍스트 내용을 나눠서 저장한다..(개행 문자를 기준으로)

    $myText = $array[12]

    이중에서 12번째 라인을 $myText에 저장..
    $myText의 내용은
    다음과 같은 내용이다 이중에서 초당 속도가 필요하다..

    $Array = StringSplit($myText,",",0)

    , 를 기준으로 다시 나눠서

    $Array2 = StringSplit($Array[2]," ",0)

    다시 스페이스를 기준으로 나눈다

    $speed = $Array2[4]
    $unit = $array2[5]

    이렇게 하면 초당 업로드 속도가 $speed에 $unit에는 B, KB, GB 등의 단위가 저장이 된다

    if $speed < 100 AND $unit == "KB" Then
    $flagCount += 1
    ElseIf $unit == "B" Then
    $flagCount += 1
    Else
    $flagCount = 0
    EndIf

    다운로드 속도가 100K 이하인 경우에는 $flagCount를 1씩 더하게 되고 속도가 넘어가는 경우에는 0으로 리셋을 하게 한다..

    이 모든  루프를 일정 시간 간격으로 루프를 돌리면서 $flagCount가 원하는 수 이상이 되면 컴퓨터를 정리하고 
    종료 시키도록 하면 원하는 다운로드 이하가 되면 자동 종료하게 된다...

    허접한 소스지만...원하는 작동이 되게는 완료.. 마지막 정리는 역시 개인적으로 제일 좋아하는 
    CCleaner로 정리... 다음에는 CPU 사용량이 일정이하이면 종료하는 프로그램을...

    #requireadmin
    Opt("TrayIconHide", 1)

    Dim $flagCount
    ShellExecute("NetMonitoring.exe")
    WinWaitActive("NetMonitoring")
    Sleep(5000)
    $flagCount = 0
    Do
    $text = WinGetText("NetMonitoring")
    $Array = StringSplit($text,Chr(10),0)
    $myText = $array[12]
    $Array = StringSplit($myText,",",0)
    $Array2 = StringSplit($Array[2]," ",0)

    $speed = $Array2[4]
    $unit = $array2[5]

    Sleep(5000)
    if $speed < 100 AND $unit == "KB" Then
    $flagCount += 1
    ElseIf $unit == "B" Then
    $flagCount += 1
    Else
    $flagCount = 0

    EndIf
    Until $flagCount > 10

    WinClose("NetMonitoring")

    ShellExecute("c:\Program Files (x86)\CCleaner\CCleaner.exe")
    WinWait("Piriform CCleaner")
    Send("!r")
    Sleep(10000)
    WinClose("Piriform CCleaner")

    ShellExecute("shutdown.exe","/s /t 10",@SystemDir)

    반응형

    '컴퓨터' 카테고리의 다른 글

    윈도7 대학생 프로모션  (0) 2009.10.27
    Nanami Madobe Windows7 Theme  (0) 2009.10.26
    Autoit 3.3 SciTE 한글쓰기  (2) 2009.10.26
    해킹 겸 보안도구  (0) 2009.10.21
    제로보드 pl9 및 9.22자 취약성 패치  (0) 2009.10.18

    댓글

Designed by Tistory.