바이두 클라우드 전송 실패[31212]가 되면 자동으로 재시작 전송하는 매크로
Tip/AHKmacro
2014. 10. 11. 15:21
안녕하세요.
이번에는 skypoll님의 요청(http://w3tech.tistory.com/252#comment10971664)으로 간단한 매크로를 만들었습니다.
전송 중 잦은 에러로 많은 파일을 업로드 걸어놓고 시간이 지나고 보면 전송 실패[31212] 등의 이유로 여러 파일들이 미처 업로드가 되지 않은 상황을 해결하기 위한 매크로입니다.
설명을 하자면 일단 처음에 바이두 클라우드 창 활성화 하고 항상 위로 설정합니다.
그리고 전송 목록이 접혀져 있으면 펼칩니다.
그 다음 전송 목록을 스캔하여
전송 시작 버튼이 있으면 클릭을 합니다.
목록 스캔은 1초 간격으로 합니다.
시작 단축키는 Ctrl+HOME 키이며
중지 단축키는 Ctrl+END 키 입니다.
프로그램 종료는 트레이 아이콘 오른쪽 클릭을 해서 종료를 클릭하면 됩니다.
* 제가 클라우드에 파일을 올리는 일이 드물다보니 다양한 상황에서 테스트를 제대로 해보지 못 했습니다.
* 오작동할수도 있으니 스크립트를 적절히 고쳐서 사용하세요.
+ 2014년 10월 12일 추가 변경
- 전송 재게 처리 숫자 카운트 표시
- 처음 동작시 전송 목록 접혀진것 펴지 못 하는 오류 수정
+ 2014년 10월 19일 추가 변경
- 전송 시작 버튼이 파란색일때() 인식 못 하던것 수정
- 마우스 커서를 클릭 후 원래 위치로 돌려 놓게 수정
아래는 소스입니다.
;~ AutoRetry
;~ 전송 도중 실패된 파일을 다시 전송 클릭하는 매크로 입니다.
#NoEnv
#SingleInstance force
Menu,Tray,NoStandard
Menu,Tray,Add,시작 (Ctrl+HOME),Work
Menu,Tray,Add
Menu,Tray,Add,멈춤 (Ctrl+END),Stop
Menu,Tray,Add
Menu,Tray,Add,종료,Exit
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
CoordMode, ToolTip, Screen
SetTitleMatchMode, 2
SetDefaultMouseSpeed,0
SetMouseDelay,-1
FileInstall, img\start_down.bmp, %A_Temp%\start_down.bmp,1
FileInstall, img\start_down.bmp, %A_Temp%\start_hover.bmp,1
; 잠깐 멈춤 핫키
Pause::Pause
; Ctrl+HOME 핫키로 시작
^HOME::
gosub, Work
return
; Ctrl+END 핫키로 멈춤
^END::
gosub, Stop
return
Work:
; 종료 체크 변수 지정
checkBreak := 0
; 클릭 횟수 카운트 변수
count := 0
; 바이두 클라우드 창 이름을 클래스로 변수 지정
className := "ahk_class BaseGui"
; 창 활성화
WinActivate, %className%
; 창을 항상 위로 설정
WinSet, AlwaysOnTop, On, %className%
; 클라우드 창의 위치와 크기를 저장
WinGetPos, X, Y, Width, Height, %className%
; 전송 목록 펼치기
PixelSearch, reX, reY, X+Width-60, Y+105, X+Width-30, Y+115, 0x66B82C, 0, RGB
if ( ErrorLevel = 0 ){
; 접혀져 있으면 클릭
mClick(reX+5,reY+5)
; 업로드 탭을 클릭하는 동작이지만 다운로드 에러는 무시되므로 생략
;~ Sleep,1000
;~ MouseClick,Left,X+185,Y+115,1
}
; 툴팁으로 시간 표시를 위해 시작 시간 저장
Start := A_TickCount
Loop
{
; 클라우드 프로그램이 없으면 반복작업 종료
IfWinNotExist, %className%
gosub, Stop
; 중지 변수 체크
if ( checkBreak = 1 ){
ToolTip
WinSet, AlwaysOnTop, Off, %className%
break
}
; 반복 작업 간격 설정 1000 = 1초
Sleep,1000
; 클라우드 창의 위치와 크기를 저장
WinGetPos, X, Y, Width, Height, %className%
; 재시작 버튼을 검색 후 있다면 클릭 (회색)
ImageSearch, reX, reY, X+Width-170,Y+170,X+Width-120,Y+Height-40,*50 *transWhite %A_Temp%\start_down.bmp
if ( ErrorLevel = 0 ){
count++
mClick(reX+8,reY+8)
}else{
; 재시작 버튼을 검색 후 있다면 클릭 (청색)
ImageSearch, reX, reY, X+Width-170,Y+170,X+Width-120,Y+Height-40,*50 *transWhite %A_Temp%\start_hover.bmp
if ( ErrorLevel = 0 ){
count++
mClick(reX+8,reY+8)
}
}
msec2time(ElapsedTime, A_TickCount-Start)
ToolTip, 전송 오류 감시 중...`n%ElapsedTime% 지남 (감시 종료는 Ctrl+END)`n%count%개 처리, X,Y
}
return
Stop:
checkBreak := 1
return
Exit:
FileDelete,%A_Temp%\start_down.bmp
FileDelete,%A_Temp%\start_hover.bmp
ExitApp
return
; 시분초로 변환
msec2time(ByRef calTime,ElapsedTime){
hour:=floor(ElapsedTime/3600000)
hour:=Mod(hour,24)
min:=floor(ElapsedTime/60000)
min:=Mod(min,60)
sec:=Mod(ElapsedTime/1000,60)
sec:=floor(sec)
calTime := sec . "초"
IfNotEqual,min,0
calTime := min . "분 " . calTime
IfNotEqual,hour,0
calTime := hour . "시간 " . calTime
return
}
; 마우스 클릭 후 커서를 제자리로 돌림
mClick(mX,mY){
IfWinActive,%className%
{
MouseGetPos,X,Y
MouseClick,left,mX,mY
MouseMove, %X%,%Y%
}else{
WinGetTitle,otherWin,A
MouseGetPos,X,Y
WinActivate,%className%
Sleep,200
MouseClick,left,mX,mY
WinActivate,%otherWin%
MouseMove, %X%,%Y%
}
}