안녕하세요.

    예전에 바이두 클라우드 한국어 패치 작업을 편하게 하기 위해 AHK를 이용하여 패쳐를 만들었었죠.

    http://w3tech.tistory.com/189


    간단하고 급하게 만든것인지라 다양한 환경에서 오류가 생기기도 했습니다.


    ※ install 버전과 포터블 버전에 따른 오류

    ※ 클라우드 버전이 틀려서 생기는 오류

    ※ zip파일 압축을 풀지 않고 압축프로그램에서 실행해서 생기는 오류

    ※ 운영체제(XP,Win7계열)에 따른 설치경로가 틀려서 생기는 오류


    이런 문제들때문에 아예 확 바꿨습니다.

    exe파일 안에 한국어 패치한 버전별 모든 db 파일을 집어넣었습니다.

    (zip파일 압축 프로그램으로 열어서 바로 실행해도 문제가 없음)

    버전별 모든 db파일을 넣어서 설치된 버전을 체크해서 버전에 맞게 패치합니다.

    install버전이 아닌 경우 포터블 폴더를 지정합니다.


    db 파일 언팩/리팩에 도움을 주신 포레님(http://foreblog.tistory.com)께 감사드립니다.


    2016년 10월 11일 변경 내용

    바이두 클라우드의 이름 변경 (BaiduNetdisk) 적용

    7za 압축 업데이트(7z1604)

    AHK 컴파일 버전 업데이트(112401)


    2016년 05월 04일 변경 내용

    바이두 클라우드의 업데이트 기능으로 버전이 올라갔을때 패치가 제대로 되지 않던걸 수정했습니다.

    예를들어 5.0버전을 설치 후 나중에 자동 업데이트로 5.1이 되었다고 하면

    레지스트리에 저장된 프로그램 버전은 5.0이고 프로그램(exe)의 버전은 5.1입니다.

    이전 패쳐의 경우 레지스트리의 버전값을 가지고 패쳐를 해서 오류가 발생했습니다.

    그걸 프로그램 버전을 기준으로 변경했습니다.

    패쳐(BaiduCloudKorPatcher160504.zip)를 새로 받아서 사용하시기 바랍니다.



    2014년 09월 23일 추가 변경 내용

    4.8.0 버전부터 패치 방식을 변경하여,

    기존의 단순 수정된 db파일 복사하는 방식에서

    db 파일을 직접 수정하는 방식으로 변경되었습니다.

    default.db 파일의 용량이 버전마다 3메가를 넘겨서 부득이하게 변경하게 되었습니다.

    4.8.0 이전 버전은 예전 방식대로 수정된 resource.db 파일만 복사하고

    이후 버전은 티스토리 서버에서 압축된 xml파일을 받아서 버전에 맞게 수정합니다.

    덕분에 이제 패쳐 실행파일 exe를 버전 업데이트때마다 새로 받을 필요가 없어졌습니다.

    물론 인터넷이 연결된 상태여야되고 티스토리 서버가 죽으면 안 된다는 소소한(?) 문제가 있습니다만...

    바이러스 오진 대응과 향후 새 버전 업데이트 대처를 위해 변경하게되었습니다.

    BaiduCloudKorPatcher.exe 만 실행시키면 향후 업데이트된 바이두 클라우드가 나와도 제가 부지런히 번역 수정한 파일을 티스토리 서버에 올렸다면 바로 패치가 가능합니다.

    AVAST등의 백신에서 바이러스 의심 파일로 바로 삭제가 되어 제대로 동작이 안 될 수 있습니다.

    그럴땐 실시간 감시를 잠시 끄고 패치를 하시기 바랍니다.


    사용 중인 백신 프로그램에서 바이러스로 검진됐을때 해당 백신 프로그램으로 오진 신고를 해주세요.

    http://www.techsupportalert.com/content/how-report-malware-or-false-positives-multiple-antivirus-vendors.htm


    자동 업데이트가 된 다음 패쳐를 할 경우 한글이 이상하게 나올수 있습니다.

    레지스트리와 실행파일에 기록된 버전이 이전 버전으로 저장되어 있어서 패쳐가 버전 인식을 못 해서 그렇습니다.

    이럴 경우 바이두 클라우드 프로그램을 삭제 후 재설치한 다음 패치를 하시기 바랍니다.






    오토핫키 활용에 참고가 되었으면 합니다.


    변경 내역


    
    #NoTrayIcon 
    #NoEnv
    #SingleInstance force
    CoordMode,ToolTip,Screen
    CoordMode,Mouse,Screen
    CoordMode,Pixel,Screen
    
    DownloadToFile(url, filename)
    {
        static a := "AutoHotkey/" A_AhkVersion
        if (!(o := FileOpen(filename, "w")) || !DllCall("LoadLibrary", "str", "wininet") || !(h := DllCall("wininet\InternetOpen", "str", a, "uint", 1, "ptr", 0, "ptr", 0, "uint", 0, "ptr")))
            return 0
        c := s := 0
        if (f := DllCall("wininet\InternetOpenUrl", "ptr", h, "str", url, "ptr", 0, "uint", 0, "uint", 0x80003000, "ptr", 0, "ptr"))
        {
            while (DllCall("wininet\InternetQueryDataAvailable", "ptr", f, "uint*", s, "uint", 0, "ptr", 0) && s>0)
            {
                VarSetCapacity(b, s, 0)
                DllCall("wininet\InternetReadFile", "ptr", f, "ptr", &b, "uint", s, "uint*", r)
                c += r
                o.rawWrite(b, r)
            }
            DllCall("wininet\InternetCloseHandle", "ptr", f)
        }
        DllCall("wininet\InternetCloseHandle", "ptr", h)
        o.close()
        return c
    }
    
    if ( !A_IsCompiled ){
    	FileSetTime,%A_Now%,%A_ScriptDir%\BaiduYunGuanjia\data\xmls\*.*,C,1,1
    	FileSetTime,%A_Now%,%A_ScriptDir%\BaiduYunGuanjia\data\xmls\*.*,M,1,1
    	FileSetTime,%A_Now%,%A_ScriptDir%\BaiduYunGuanjia\data\xmls\*.*,A,1,1
    	Run, 7za.exe a -t7z -mx9 -y -r "newdata.7z" ".\xmls\*",%A_ScriptDir%\BaiduYunGuanjia\data,hide
    }
    tmpDir:=A_Temp "\BaiduPatch"
    FileCreateDir, %tmpDir%
    FileInstall, img\title.png, %A_Temp%\BaiduPatch\title.png, 1
    FileInstall, img\baiduyunguanjia_.png, %A_Temp%\BaiduPatch\baiduyunguanjia.png, 1
    FileInstall, img\baiduyun_.png, %A_Temp%\BaiduPatch\baiduyun.png, 1
    FileInstall, img\trayicon_BaiduYun.bmp, %A_Temp%\BaiduPatch\trayicon_BaiduYun.bmp, 1
    FileInstall, img\trayicon_BaiduYunGuanjia.bmp, %A_Temp%\BaiduPatch\trayicon_BaiduYunGuanjia.bmp, 1
    FileInstall, img\trayicon_BaiduYun_off.bmp, %A_Temp%\BaiduPatch\trayicon_BaiduYun_off.bmp, 1
    FileInstall, img\trayicon_BaiduYunGuanjia_off.bmp, %A_Temp%\BaiduPatch\trayicon_BaiduYunGuanjia_off.bmp, 1
    FileInstall, BaiduYunGuanjia\data\7za.exe,%tmpDir%\7za.exe,1
    FileInstall, BaiduYunGuanjia\data\OLECompactRepacker.exe,%tmpDir%\OLECompactRepacker.exe,1
    if ( !A_IsCompiled ){
    	FileInstall, BaiduYunGuanjia\data\newdata.7z,%tmpDir%\newdata.7z,1
    }else{
    	DownloadToFile("http://cfs.tistory.com/custom/blog/63/631340/skin/images/newdata.7z?=" A_Now,tmpDir "\newdata.7z")
    }
    Run,7za.exe x -y "newdata.7z",%tmpDir%,Hide
    Gui, Color, FFFFFF
    Gui, Add, Picture, x22 y70 w128 h128 , %A_Temp%\BaiduPatch\baiduyunguanjia.png
    Gui, Add, Picture, x172 y70 w128 h128 , %A_Temp%\BaiduPatch\baiduyun.png
    Gui, Add, Picture, x3 y10 w320 h50 , %A_Temp%\BaiduPatch\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/196 
    Gui, Show, h280 w326, 바이두 클라우드 한국어 패치
    Return
    
    refreshTray:
    MouseGetPos,PosX,PosY
    WinGet,Tray_ID,ID,ahk_class Shell_TrayWnd
    WinGetPos, X1, Y1, cWidth, cHeight, ahk_id %Tray_ID%
    X2 := X1+cWidth
    Y2 := Y1+cHeight
    
    ImageSearch, reX, reY, X1, Y1, X2, Y2, *10 %A_Temp%\BaiduPatch\trayicon_%client%.bmp
    if ( ErrorLevel = 0 )
    {
    	MouseMove, reX+5, reY+5,0
    }else{
    	ImageSearch, reX, reY, X1, Y1, X2, Y2, *10 %A_Temp%\BaiduPatch\trayicon_%client%_off.bmp
    	if ( ErrorLevel = 0 )
    	{
    		MouseMove, reX+5, reY+5,0
    	}
    }
    MouseMove,%PosX%,%PosY%,0
    Return
    
    
    Button웹하드방식:
    client=BaiduYunGuanjia
    gosub,Patch
    return
    
    Button동기화방식:
    client=BaiduYun
    gosub,Patch
    return
    
    Patch:
    if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME,WIN_XP,WIN_2000
    {
    	RegRead, ver, HKLM,Software\Baidu\%client%,Version
    }else{
    	RegRead, ver, HKCU,Software\Baidu\%client%,Version
    }
    if ( ErrorLevel = 1 )
    {
    	MsgBox, %client%가 설치되어 있지 않습니다.`n클라우드가 설치된 경로를 선택하세요.
    	FileSelectFolder, path,,0,BaiduYunGuanjia.exe, resource.db가 있는 폴더 선택
    	if ErrorLevel = 1
    	{
    		MsgBox, 취소되었습니다.
    		return
    	}
    	IfNotExist, %path%\%client%.exe
    	{
    		MsgBox,%client%.exe 실행파일이 없는 폴더입니다.
    		if ( client = "BaiduYunGuanjia" )
    			client = BaiduNetdisk
    		return
    	}else{
    		FileGetVersion, ver_long, %path%\%client%.exe
    		if ( ErrorLevel > 0 ){
    			client = BaiduNetdisk
    			FileGetVersion, ver_long, %path%\%client%.exe
    		}
    		RegExMatch(ver_long,"([\d]+)\.([\d]+)\.([\d]+)\.[\d]+",vers)		
    		ver := vers1 "." vers2 "." vers3
    	}
    }else{
    	if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME,WIN_XP,WIN_2000
    	{
    		RegRead, path, HKLM,Software\Baidu\%client%,installDir
    	}else{
    		RegRead, path, HKCU,Software\Baidu\%client%,installDir
    	}
    	FileGetVersion, ver_long, %path%\%client%.exe
    	if ( ErrorLevel > 0 ){
    		client = BaiduNetdisk
    		FileGetVersion, ver_long, %path%\%client%.exe
    	}
    	RegExMatch(ver_long,"([\d]+)\.([\d]+)\.([\d]+)\.[\d]+",vers)		
    	exe_ver := vers1 "." vers2 "." vers3
    	if ( ver != exe_ver ){
    		MsgBox, 레지스트리의 버전 : %ver%`n실행 파일의 버전 : %exe_ver%`n%exe_ver% 버전으로 패치합니다.
    		ver:=exe_ver
    	}
    }
    FileList =
    Process, Close, %client%.exe
    Sleep,500
    gosub, refreshTray
    if ( client = "BaiduNetdisk" )
    	client = BaiduYunGuanjia
    Loop, %tmpDir%\%client%\*,1
    	FileList = %FileList%%A_LoopFileName%`n
    Loop, parse, FileList, `n
    {
    	IfInString, A_LoopField, %ver%
    	{
    		found:=1
    		break
    	}
    }
    if ( found != 1 )
    {
    	MsgBox, 패치파일이 없습니다!(ver %ver%)`n설치된 버전에 맞는 번역 패치가 없습니다!`nhttp://w3tech.tistory.com 블로그에서 확인하세요.
    	gosub, goExit
    }else{
    	found:=
    	patched:=0
    	FileCopy, %path%\resource.db, %path%\resource_%ver%_%A_Now%.db, 1
    	if ErrorLevel = 1
    	{
    		MsgBox, resource.db 파일백업 실패!
    		return
    	}
    		FileCopy, %path%\skin\default.db, %path%\skin\default_%ver%_%A_Now%.db, 1
    		if ErrorLevel = 1
    		{
    			MsgBox, default.db 파일백업 실패!
    			return
    		}
    		IfExist, %tmpDir%\%client%\%ver%\default
    		{
    			cmdRun:="OLECompactRepacker.exe -R """ path "\skin\default.db"" " tmpDir "\" client "\" ver "\default"""
    			try
    			{
    				RunWait, %cmdRun%,%tmpDir%,hide,runPID
    			} catch e {
    				MsgBox, default.db 수정 실패!`n%e%
    				patched++
    			}
    		}
    		IfExist, %tmpDir%\%client%\%ver%\resource
    		{
    			cmdRun:="OLECompactRepacker.exe -R """ path "\resource.db"" " tmpDir "\" client "\" ver "\resource"""
    			try
    			{
    				RunWait, %cmdRun%,%tmpDir%,hide,runPID
    			} catch e {
    				MsgBox, resource.db 수정 실패!`n%e%
    				patched++
    			}
    		}
    		IfExist, %tmpDir%\%client%\%ver%\duiengineskin
    		{
    			FileCopy, %path%\skin\duiengineskin.zip, %path%\skin\duiengineskin_%ver%_%A_Now%.zip, 1
    			if ErrorLevel = 1
    			{
    				MsgBox, duiengineskin.zip 파일백업 실패!
    				return
    			}
    			cmdRun:="7za.exe u -r """ path "\skin\duiengineskin.zip"" " tmpDir "\" client "\" ver "\duiengineskin\*"""
    			try
    			{
    				RunWait, %cmdRun%,%tmpDir%,hide,runPID
    			} catch e {
    				MsgBox, duiengineskin.zip 수정 실패!`n%e%
    				patched++
    			}
    		}
    }
    if ( patched < 1 ){
    	MsgBox, 패치 완료! (%ver% 버전)`n최신 버전의 한글패치는`nhttp://w3tech.tistory.com`n방문해주세요!
    	IfExist, %path%\%client%.exe
    		Run, %path%\%client%.exe,,Hide
    	else
    		Run, %path%\BaiduNetdisk.exe,,Hide
    	gosub, goExit
    }else{
    	MsgBox, 패치 실패! (%patched%개)`n패쳐를 관리자 권한으로 실행해보세요.
    }
    return
    
    Exit:
    GuiClose:
    gosub, goExit
    return
    
    goExit:
    FileRemoveDir, %tmpDir%, 1
    ExitApp
    return
    


    신고
    Posted by 확인소장
    • 이전 댓글 더보기
    • 권혜정
      2016.10.07 16:34 신고

      감사합니다. 잘 쓸게요~^^

    • 좋은아침
      2016.10.17 12:15 신고

      고맙습니다..

    • ㅇㅇ
      2016.10.26 19:37 신고

      설치형으로 깔고 로그인할떄 중국어로 코드입력하라고 하는데 어떻게 해야될까요??

    • 차수환
      2016.11.05 21:27 신고

      이거 속도패치된건 아니죠?

    • 모리어티
      2016.11.09 17:29 신고

      정말 잘 작동합니다. 언어장벽의 한계를 여기서 뛰어넘고 가네요. 고맙습니다!!

    • 박통장
      2016.11.26 10:41 신고

      감사히 사용하겠습니다


    • 2016.12.25 20:34 신고

      어...패치 파일이 깔린 폴더의 경로를 인식하지 못하는데.. .해결방법 있습니까..?

    • 홍늑
      2017.01.18 15:51 신고

      잘 쓸게요. ㄳㄳ


    • 2017.01.21 19:09 신고

      근데 패치하면 이거 서버오류(1550010)가 나는데 왜 그런건가요?
      5.50버젼인데

    • 111
      2017.02.14 23:54 신고

      잘쓰겠읍니다

    • ㅁㅁ7
      2017.02.24 10:32 신고

      잘 쓰겠습니다. 광고하는 새끼 바이러스 새끼들은 다 죽여버려야합니다.

    • TERm
      2017.02.24 14:51 신고

      Panda 백신에서 오진합니다.


    • 2017.03.26 05:50

      비밀댓글입니다

    • 내일
      2017.04.12 12:18 신고

      한글패치를 하니 baidu yun.exe가 없어서 안열리는데 어떻게 하나요?
      또 바이두 클라우드가 구름모양이 아니라 상자모양인데 어떻게 하나요?

    • 동기화
      2017.04.19 15:30 신고

      동기화버전은 ver 3.9.11인데 패치파일이 없습니다! 설치된 버전에 맞는 번역 패치가 없습니다! 라고 뜨네요. 어떻게 해야 할까요?

    • 감사합니당
      2017.04.24 21:56 신고

      오오..감사합니당


    • 2017.05.04 09:09

      비밀댓글입니다

    • 잇힝
      2017.05.21 14:45 신고

      감사합니다. 잘 쓰겠습니다.

    • 어라
      2017.05.26 08:10 신고

      5.5.5인테 패치가 없다고 나옴다ㅠ

      • 확인소장
        2017.05.26 14:02 신고

        지금까지 패치파일을 티스토리 스킨 공간에 업로드하여 패치 파일을 다운로드해서 패치하는 방식을 사용해왔습니다.
        그런데 이번에 확인해보니 티스토리 스킨 공간에 업로드한 파일의 주소가 바뀐듯 하더군요.
        예전엔 새로 업로드해도 다운로드 주소가 그대로 유지되었는데 지금은 업로드해도 이전 버전의 파일로만 다운로드가 됩니다...
        따라서 패치 파일을 어디다 업로드 해야할지 고민스럽네요.

        일단은 자동패치말고 수동으로(복&붙) 패치하시길 바랍니다.

        (일단 수정한 패쳐를 올렸습니다. 패쳐를 새로 받으시길 바랍니다.)

    • 박재아재
      2017.07.01 21:04 신고

      너무 너무 감사합니다.

티스토리 툴바