본문 바로가기

Tip/AHKmacro

[AHK] 바이두 클라우드 프록시 전환

안녕하세요.

이번에도 역시 오토핫키(AutoHotKey)를 이용하여 간단한 유틸을 만들어봤습니다.

다름이 아니고 http://w3tech.tistory.com/201 이 포스트에서 소개한 바와 같이 프록시 서버 설정을 하면 다운이나 업로드 진행이 안 되던 파일들이 진행이 되는 팁을 소개하였습니다.

하지만 제가 직접 프록시 서버를 변경하면서 사용하다보니 프록시 서버 변경하는게 상당히 귀찮은 작업이더군요.

클라우드 실행 -> 설정 -> 넷웤 -> 프록시 설정 종료 후 재시작

이 작업이 상당히 번거롭게 느껴졌습니다.


그래서 오토핫키로 만들어봤습니다.

기본 뼈대는 기존의 패쳐에서 가지고 왔습니다.

동작을 간단하게 설명하자면

1. 해당하는 클라우드 그림 밑의 버튼을 클릭하면

2. 레지스트리를 읽어서 클라우드 설치 경로를 읽습니다.

3. 클라우드 클라이언트를 종료시킵니다.

4-1. 유틸을 처음 시작했고 프록시 서버 설정이 기본값이면 프록시 서버 설정을 입력 받습니다.

4-2. 프록시 서버 설정으로 사용 중이라면 현재 프록시 서버 설정값을 ProxySetting_temp.ini 파일로 백업합니다.

5. 프록시 설정 초기값(0)과 저장된 프록시 서버 설정값을 버튼 누를때마다 서로 맞교환합니다.

6. 변경 후 설정된 현재값을 표시합니다.


간단합니다.

중간에 refreshTray 라벨은 클라이언트 강제 종료시 트레이 아이콘이 남은것을 없애주는 동작입니다.

기능 건의, 버그 댓글 주시면 고쳐나가도록 하겠습니다.

다운로드

↓↓↓↓↓


BaiduSwapProxy20140413.zip











추가된 코드

+ 가운데에 현재 프록시 설정을 출력

+ 프록시 설정 변경 확인 후 클라이언트 종료하게 변경

+ GUI 세로 크기 축소

+ 내부 코드 변경 및 함수 처리

-- 2014.04.13 변경점 --

+ 포터블에서도 가능하게 변경

+ 경로 읽을때 실행파일이 아닌 프록시 설정 파일 위치 기준으로 변경


#NoTrayIcon 
#NoTrayIcon 
#NoEnv
#SingleInstance force
SetBatchLines,-1
CoordMode,ToolTip,Screen
CoordMode,Mouse,Screen
CoordMode,Pixel,Screen
FileCreateDir, %A_Temp%\BaiduProxy
FileInstall, img\title_proxy.png, %A_Temp%\BaiduProxy\title_proxy.png, 1
FileInstall, img\baiduyunguanjia.png, %A_Temp%\BaiduProxy\baiduyunguanjia.png, 1
FileInstall, img\baiduyun.png, %A_Temp%\BaiduProxy\baiduyun.png, 1
FileInstall, img\trayicon_BaiduYun.bmp, %A_Temp%\BaiduProxy\trayicon_BaiduYun.bmp, 1
FileInstall, img\trayicon_BaiduYunGuanjia.bmp, %A_Temp%\BaiduProxy\trayicon_BaiduYunGuanjia.bmp, 1
FileInstall, img\trayicon_BaiduYun_off.bmp, %A_Temp%\BaiduProxy\trayicon_BaiduYun_off.bmp, 1
FileInstall, img\trayicon_BaiduYunGuanjia_off.bmp, %A_Temp%\BaiduProxy\trayicon_BaiduYunGuanjia_off.bmp, 1
Gui, Color, FFFFFF
Gui, Add, Picture, x17 y68 w88 h88 vPop1 gRunBaiduyunguanjia, %A_Temp%\BaiduProxy\baiduyunguanjia.png
Gui, Add, Picture, x227 y68 w88 h88 vPop2 gRunBaiduyun, %A_Temp%\BaiduProxy\baiduyun.png
Gui, Add, Picture, x3 y10 w320 h50 , %A_Temp%\BaiduProxy\title_proxy.png
Gui, Add, Button, x16 y160 w90 h50 vButton1 , 웹하드방식
Gui, Add, Button, x226 y160 w90 h50 vButton2 , 동기화방식
Gui, Add, Text,x110 y80 w110 h120 vBYG +Center
Gui, Font, s8
Gui, Add, Link, x55 y215 w245 h20 +Right, 제작 : <a href="http://w3tech.tistory.com/196">http://w3tech.tistory.com/203</a> 
Gui, Show, h235 w326, 바이두 클라우드 프록시 설정
OnMessage( 0x200, "WM_MOUSEMOVE" )
Pop1_TT:="Baiduyunguanjia.exe 실행"
Pop2_TT:="Baiduyun.exe 실행"
Button1_TT:="실행중인 클라이언트 종료 후 프록시 설정이 진행됩니다."
Button2_TT:="실행중인 클라이언트 종료 후 프록시 설정이 진행됩니다."
Return

global client,path

readINI(path,ByRef proxy,ByRef addr,ByRef port){
	IniRead, proxy, %path%\users\ProxySetting.ini, proxy_setting, proxy_type
	IniRead, addr, %path%\users\ProxySetting.ini, proxy_setting, proxy_addr
	IniRead, port, %path%\users\ProxySetting.ini, proxy_setting, proxy_port
	if ( proxy = 0 ){
		proxy:="프록시없음"
	}
	if ( proxy = 1 ){
		proxy:="HTTP프록시"
	}
	if ( proxy = 2 ){
		proxy:="SOCK프록시"
	}
	if ( proxy = 3 ){
		proxy:="IE프록시"
	}	
	GuiControl,,BYG,%client%`n`n%proxy%`n`nIP : %addr%`n`nPORT : %port%
	return
}

printP(client){
	if ( path = "" ){
		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
		}
	}
	if path
	{
		readINI(path,proxy,addr,port)	
	}else{
		proxy:=
		addr:=
		port:=
		path:=
		GuiControl,,BYG,
	}
	return
}

WM_MOUSEMOVE( wparam, lparam, msg, hwnd )
{
	static CurrControl, PrevControl, _TT
	CurrControl := A_GuiControl
	If (CurrControl <> PrevControl){
		SetTimer, DisplayToolTip, -1000
		PrevControl := CurrControl
	}
	
	if ( CurrControl = "Pop1" or CurrControl = "Button1" ){
		client=BaiduYunGuanjia
		printP(client)
	}else if ( CurrControl = "Pop2" or CurrControl = "Button2" ){
		client=BaiduYun
		printP(client)
	}
	
	DisplayToolTip:
	try{
		ToolTip % %CurrControl%_TT
	}catch{
		ToolTip
	}	
	SetTimer, RemoveToolTip, -1000
	return
	
	RemoveToolTip:
	ToolTip
	return
}

readReg:
if ( path = "" ){ 
	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
	}
	if ( ErrorLevel = 1 ){
		MsgBox, 설치된 경로를 못 찾았습니다!`n직접 폴더를 선택하세요. (ProxySetting.ini)
		FileSelectFolder, path, ,0
		if ErrorLevel = 1
		{
			MsgBox, 취소되었습니다.
			Exit
		}
		IfNotExist, %path%\ProxySetting.ini
		{
			MsgBox,ProxySetting.ini 설정파일이 없는 폴더입니다.
			Exit
		}else{
			StringLen,pathLen,path
			StringLeft, path, path, % pathLen-6
		}
	}
}
return

result:
Process, Close, %client%.exe
Sleep,500
gosub, refreshTray
readINI(path,proxy,addr,port)
MsgBox, 변경 완료!`n프록시 종류 : %proxy%`n주소 : %addr%`n포트 : %port%`n`n최신 버전은`n http://w3tech.tistory.com `n에 방문해주세요!
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%\BaiduProxy\trayicon_%client%.bmp
if ( ErrorLevel = 0 )
{
	MouseMove, reX+5, reY+5,0
}else{
	ImageSearch, reX, reY, X1, Y1, X2, Y2, *10 %A_Temp%\BaiduProxy\trayicon_%client%_off.bmp
	if ( ErrorLevel = 0 )
	{
		MouseMove, reX+5, reY+5,0
	}
}
MouseMove,%PosX%,%PosY%,0
Return

SwapProxySetting:
gosub, readReg
if path
{	
	IfNotExist,%path%\users\ProxySetting_temp.ini
	{	
		IfExist, %path%\users\ProxySetting.ini
		{		
			IniRead, Is_Proxy,%path%\users\ProxySetting.ini,proxy_setting,proxy_type		
			if ( Is_Proxy = 0 ) {
				InputBox, addr, 프록시 서버 주소, 주소를 입력하세요 (ex 123.123.123.123)
				if ( addr = "" ){
					MsgBox, 취소됨
					Exit
				}
				InputBox, port, 프록시 서버 포트, 포트를 입력하세요 (ex 8080)
				if ( port = "" ){
					MsgBox, 취소됨
					Exit
				}
				FileCopy, % path . "\users\ProxySetting.ini", % path . "\users\ProxySetting_temp.ini", 1
				IniWrite, 1, %path%\users\ProxySetting.ini, proxy_setting, proxy_type
				IniWrite, %addr%, %path%\users\ProxySetting.ini, proxy_setting, proxy_addr
				IniWrite, %port%, %path%\users\ProxySetting.ini, proxy_setting, proxy_port
				gosub,result				
			}else{
				FileCopy, % path . "\users\ProxySetting.ini", % path . "\users\ProxySetting_temp.ini", 1
				IniWrite, 0, %path%\users\ProxySetting.ini, proxy_setting, proxy_type
				IniWrite, %A_Space%, %path%\users\ProxySetting.ini, proxy_setting, proxy_addr
				IniWrite, %A_Space%, %path%\users\ProxySetting.ini, proxy_setting, proxy_port
				gosub,result
			}
		}else{
			MsgBox, %path%\users\ProxySetting.ini `n파일을 찾지 못 했습니다.
		}
	}else{
		IniRead, Is_Proxy,%path%\users\ProxySetting.ini,proxy_setting,proxy_type
		if ( Is_Proxy = 0 ) {
			IniRead, temp_type, %path%\users\ProxySetting_temp.ini, proxy_setting, proxy_type
			IniRead, temp_addr, %path%\users\ProxySetting_temp.ini, proxy_setting, proxy_addr
			IniRead, temp_port, %path%\users\ProxySetting_temp.ini, proxy_setting, proxy_port
			MsgBox,4,, 프록시 서버를 설정합니까?`n서버 : %temp_addr%`n포트 : %temp_port%
			IfMsgBox No
				Exit			
			IniWrite, %temp_type%, %path%\users\ProxySetting.ini, proxy_setting, proxy_type
			IniWrite, %temp_addr%, %path%\users\ProxySetting.ini, proxy_setting, proxy_addr
			IniWrite, %temp_port%, %path%\users\ProxySetting.ini, proxy_setting, proxy_port
		}else{
			MsgBox,4,, 프록시 서버 설정을 초기화합니까? (프록시 설정은 백업됨)
			IfMsgBox No
				Exit
			FileCopy, % path . "\users\ProxySetting.ini", % path . "\users\ProxySetting_temp.ini", 1
			IniWrite, 0, %path%\users\ProxySetting.ini, proxy_setting, proxy_type
			IniWrite, %A_Space%, %path%\users\ProxySetting.ini, proxy_setting, proxy_addr
			IniWrite, %A_Space%, %path%\users\ProxySetting.ini, proxy_setting, proxy_port
		}
		gosub,result
	}
}
return


Button웹하드방식:
client=BaiduYunGuanjia
gosub,SwapProxySetting
return

Button동기화방식:
client=BaiduYun
gosub,SwapProxySetting
return

RunBaiduyunguanjia:
client=BaiduYunGuanjia
gosub, readReg
IfExist,% path "\" client ".exe"
	Run, % path "\" client ".exe"
else
	MsgBox, % path "\" client ".exe 실행파일이 없습니다." 
return

RunBaiduyun:
client=BaiduYun
gosub, readReg
IfExist,% path "\" client ".exe"
	Run, % path "\" client ".exe"
else
	MsgBox, % path "\" client ".exe 실행파일이 없습니다." 
return

Exit:
GuiClose:
FileRemoveDir, %A_Temp%\BaiduProxy, 1
ExitApp
return


반응형
  • bboych 2014.02.09 16:50

    한가지 질문이 있어요. 중간에 제가 사용자프로필폴더 이름을 바꿨는데 그후로 경로를 기존프로필이름으로만 찾아서 안되고 있는데 해결방법이 없을까요...

    • 확인소장 2014.02.09 17:52 신고

      프록시 전환하는건 소스코드 보면 알수있듯이
      바이두 클라우드가 설치된 경로(클라우드 실행파일 있는 폴더)의 users 폴더 안에 있는 ProxySetting.ini 파일을 수정하는겁니다.
      사용자 프로필 폴더 이름을 바꾸셨다고 하는데 어느걸 말하는건지 모르겠네요.
      프록시 세팅은 계정하곤 상관이 없을텐데요.
      혹시 모르니 Uninstall 후 재설치해 보세요.

    • 확인소장 2014.07.22 18:37 신고

      프록시 전환 프로그램을 다른 경로(새폴더)에 복사한 후 실행해보세요.
      각 계정마다 다른 경로에서 실행해서 관리해보세요.

  • 소장님팬 2014.04.27 15:29

    소장님 궁금한점이 있습니다~
    프록시를 사용하는데 프록시 전환한 후에 클라우드 프로그램을 키면 연결이 안된다고 뜨네요..
    그런데 다시 한번 눌러서 프록시 초기화하면 잘 들어가지구요
    뭐가 문제죠...?

    • 확인소장 2014.04.27 22:32 신고

      프록시 서버 주소를 변경해보세요.
      무료 프록시 서버의 경우 언제든지 서버가 죽을수가 있습니다.
      죽지 않더라도 특정 아이피(전송량이 많은 아이피라던지 특정 지역)를 차단시킬수가 있으니까요.

  • 일구 2014.05.23 11:42

    정말 존경스럽습니다.
    소장님 같은분과는 어떻게든 친해져야 하는데요~
    가까이 계시다면 꼭 한번 뵙고 싸인이라도 한장 받아놓고 싶네요~~ ^^

  • pkj 2014.07.22 16:46

    어떻게 쓰는지몰겠슴.

  • kim 2017.01.19 13:34

    사용법좀 알려주세요...