바이두 클라우드 한국어 패치 프로그램 AHK로 만들기
Tip/AHKmacro
2013. 9. 26. 16:25
안녕하세요.
이번엔 AHK로 바이두 클라우드의 간단한 한국어 패치 작업을 해주는 프로그램을 만들어봤습니다.
요약해서 말하자면 단순한 파일 복사 프로그램입니다.
한줄로 요약이 가능하네요.
하지만 여기서 해당 파일이 있는지 체크와 없으면 직접선택하게 하고,
운영체제에 따라 설치 경로가 다르니 운영체제도 확인해주고,
원본 파일을 백업해주고 하는 동작이 포함됩니다.
그래도 간단한 작업이니 AHK 배우는데 도움이 되었으면 합니다.
아래는 AHK 코드입니다.
#NoTrayIcon
#NoEnv ; 변수를 해석할때 환경변수를 무시, 효율(속도) 상승
#SingleInstance force ; 해당 스키립트 중복실행 방지
SetBatchLines,-1 ; 배치라인 속도 지정, -1은 최소값
FileCreateDir, %A_Temp%\img ; 임시폴더에 img폴더 생성
; 컴파일시 exe파일에 그림파일 내장시키고 실행시 임시폴더에 복사
FileInstall, img\title.png, %A_Temp%\img\title.png, 1
FileInstall, img\baiduyunguanjia.png, %A_Temp%\img\baiduyunguanjia.png, 1
FileInstall, img\baiduyun.png, %A_Temp%\img\baiduyun.png, 1
Gui, Color, FFFFFF ; GUI배경색 지정
; GUI에 그림파일 출력
Gui, Add, Picture, x22 y70 w128 h128 , %A_Temp%\img\baiduyunguanjia.png
Gui, Add, Picture, x172 y70 w128 h128 , %A_Temp%\img\baiduyun.png
Gui, Add, Picture, x3 y10 w320 h50 , %A_Temp%\img\title.png
Gui, Add, Button, x22 y210 w130 h50 , 웹하드방식 ; 버튼 생성
Gui, Add, Button, x172 y210 w130 h50 , 동기화방식
Gui, Font, s8 ; 폰트 크기 지정, 8포인트
; 하이퍼링크
Gui, Add, Link, x55 y265 w245 h20 +Right, 번역&제작 : http://w3tech.tistory.com/187
Gui, Show, h280 w326, 바이두 클라우드 한국어 패치 ; GUI생성
Return
pastePath= ; 변수를 빈값으로 미리 지정
;버튼을 눌렀을때 실행하는 라벨, Button버튼이름
Button웹하드방식:
client=BaiduYunGuanjia
gosub,Patch
return
Button동기화방식:
client=BaiduYun
gosub,Patch
return
; 주 동작을 하는 라벨
Patch:
IfnotExist, %A_ScriptDir%\%client%\resource.db ; 해당 파일이 없으면
{
MsgBox, 패치파일이 없습니다.
Exit
}
Process, Close, %client%.exe ; 프로세스에서 지정된 파일이 있으면 종료
Sleep,500
if A_OSVersion in WIN_XP,WIN_2000,WIN_98,WIN_ME ; 사용중인 OS에 따른 분기
{
pastePath=%A_ProgramFiles%\Baidu\%client%\resource.db
}else if A_OSVersion in WIN_7,WIN_8,WIN_VISTA,WIN_2003
{
pastePath=%A_AppData%\Baidu\%client%\resource.db
}
Loop
{
IfNotExist, % pastePath ; 기본 지정된 경로에 파일이 없는 경우
{
MsgBox, 패치 대상 파일을 찾지 못 했습니다. 파일 경로를 선택하세요.
FileSelectFile, pastePath, 1, resource, , *.db ; 파일 선택창을 띄워 경로를 변수에 저장
if ErrorLevel = 1
{
MsgBox, 취소되었습니다.
Exit
}
}
IfNotInString, pastePath, resource.db ; 경로 변수 안에 해당파일이름이 없다면
{
MsgBox, 패치할 파일을 정확히 고르세요.
}else{
break
}
}
FileMove, %pastePath%, %A_ScriptDir%\%client%\resource_%A_Now%.db, 1 ; 원본 파일 이동(백업)
if ErrorLevel = 1
{
MsgBox, 파일백업 실패!
Exit
}
FileCopy, %A_ScriptDir%\%client%\resource.db, %pastePath%, 1 ; 패치파일을 복사
if ErrorLevel = 1
{
MsgBox, 파일복사 실패!
Exit
}
MsgBox, 패치 완료!
return
Exit:
GuiClose:
FileRemoveDir, %A_Temp%\img, 1 ; 종료될때 임시폴더에 생성한 파일과 폴더 삭제
ExitApp
return
100줄도 안 되는 짧은 소스입니다.
실행시 당연히 해당 경로에 그림과 파일이 있어야 합니다.
아래는 실행파일과 패치파일이 포함된 압축 파일입니다.
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
실행한 화면입니다.
오늘(2013-11-21) 수정한 코드입니다.
기존 코드에서 레지스트리를 읽어서 설치된 버전을 체크하는 기능이 추가됐습니다.
#NoTrayIcon #NoEnv #SingleInstance force SetBatchLines,-1 FileCreateDir, %A_Temp%\img FileInstall, img\title.png, %A_Temp%\img\title.png, 1 FileInstall, img\baiduyunguanjia.png, %A_Temp%\img\baiduyunguanjia.png, 1 FileInstall, img\baiduyun.png, %A_Temp%\img\baiduyun.png, 1 Gui, Color, FFFFFF Gui, Add, Picture, x22 y70 w128 h128 , %A_Temp%\img\baiduyunguanjia.png Gui, Add, Picture, x172 y70 w128 h128 , %A_Temp%\img\baiduyun.png Gui, Add, Picture, x3 y10 w320 h50 , %A_Temp%\img\title.png Gui, Add, Button, x22 y210 w130 h50 , 웹하드방식 Gui, Add, Button, x172 y210 w130 h50 , 동기화방식 Gui, Font, s8 Gui, Add, Link, x55 y265 w245 h20 +Right, 번역&제작 : http://w3tech.tistory.com/194 Gui, Show, h280 w326, 바이두 클라우드 한국어 패치 Return pastePath= copyPath= Button웹하드방식: client=BaiduYunGuanjia patchVer:="4.3.0" gosub,Patch return Button동기화방식: client=BaiduYun patchVer:="3.8.0" gosub,Patch return Patch: RegRead, ver, HKCU,Software\Baidu\%client%,Version if ( ErrorLevel = 1 ) { MsgBox, %client%가 설치되어 있지 않습니다. return } if ( ver != patchVer ) { MsgBox, 버전이 틀립니다.`n클라이언트 버전 : %ver%`n한국어패치 버전 : %patchVer% return } IfnotExist, %A_ScriptDir%\%client%\resource.db { MsgBox, 패치파일이 없습니다. Exit } Process, Close, %client%.exe Sleep,500 if A_OSVersion in WIN_XP,WIN_2000,WIN_98,WIN_ME { pastePath=%A_ProgramFiles%\Baidu\%client%\resource.db runPath=%A_ProgramFiles%\Baidu\%client%\%client%.exe }else if A_OSVersion in WIN_7,WIN_8,WIN_VISTA,WIN_2003 { pastePath=%A_AppData%\Baidu\%client%\resource.db runPath=%A_AppData%\Baidu\%client%\%client%.exe } Loop { IfNotExist, % pastePath { MsgBox, 패치 대상 파일을 찾지 못 했습니다. 파일 경로를 선택하세요. FileSelectFile, pastePath, 1, resource, , *.db if ErrorLevel = 1 { MsgBox, 취소되었습니다. Exit } } IfNotInString, pastePath, resource.db { MsgBox, 패치할 파일을 정확히 고르세요. }else{ break } } FileMove, %pastePath%, %A_ScriptDir%\%client%\resource_%A_Now%.db, 1 if ErrorLevel = 1 { MsgBox, 파일백업 실패! Exit } FileCopy, %A_ScriptDir%\%client%\resource.db, %pastePath%, 1 if ErrorLevel = 1 { MsgBox, 파일복사 실패! Exit } MsgBox, 패치 완료! Run, %runPath%,,Hide return Exit: GuiClose: FileRemoveDir, %A_Temp%\img, 1 ExitApp return