IE 代理伺服器設定程式實現
本文其實.沒有什麼價值.寫出來也是處於好玩.因為.最近閒的要命.所以總喜歡去些BBS聊天室之類的地方打發時間可是.突然發現這些地方總是喜歡記錄IP真是麻煩.別人一跟蹤馬上就查出你的位置.實在是不爽.所以.就只好設定代理伺服器.IE的設定是帶這個功能的.所以很簡單.只要設定就可以了.不過,實在覺得.那樣太簡單了.所以就想自己做一個程式實現.可是沒什麼眉目.不過突然想到騰訊的瀏覽器也有類似功能.可是.整個程式才916K,所以不用說肯定是有動態連線庫的協助的.既然如此.那麼只用匯出來看看就知道了.於是.使用dumpbin這個PE工具Imports一下就全明白了象其他程式一樣.通常USER32,Kernel32.GDI32....這些都不是今天的主角.Wininet.Dll才是今天的主角.這裡匯出了.三個函式.其中InternetsetOption才是關鍵因素.在MSDN中很快查到了.所以一切都很順利.該函式的重點引數在第二個引數上面dwOption.所以繼續參考MSDN就知道了INTERNET_OPTION_PROXY和INTERNET_OPTION_SETTINGS_CHANGED.第一個看名字也知道是設定代理.第二個是負責切換設定的.OK有了這些是否就OK了呢.是的基本OK不過不要忘記了這樣做必須重啟IE.因為IE也是依賴登錄檔地.所以去登錄檔找找.很快就明白了.HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings幾乎誰都知道的Internet設定鍵.沒什麼可說的.知道了這些下面程式來實現就簡單了.因為根本沒什麼技術.只是呼叫API和寫登錄檔.
首先用Delphi來實現.delphi實現很簡單.因為delphi的單元WinInet中就封裝了該API呼叫的所有文件所以就簡單多了.首先做一級面向物件的封裝.一個物件TsetProxy,然後定義兩個資料分別是代理主機和代理埠.然後一個負責呼叫的函式.程式碼如下:
unit Unit1;
interface
uses
Registry,WinInet
type
TSetProxy=class
private
{ Private declarations }
procedure SetReg(FMProxy:string);
public
{ Public declarations }
Proxy: string;
port:string;
constructor Create(Proxy,Port:string);
procedure SetProxy();
// procedure SetProxy(const fProxy,fPort: string);
end;
implementation
//實際設定代理
procedure TSetProxy.SetProxy;
var FProxy: string;
Pinfo: INTERNET_PROXY_INFO;
begin
FProxy:=Format('%s:%s',[self.Proxy,self.port]);
Pinfo.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
Pinfo.lpszProxy := pchar(proxy);
InternetSetOption(nil, INTERNET_OPTION_PROXY, @Pinfo, SizeOf(PInfo));
InternetSetOption(nil, INTERNET_OPTION_SETTINGS_CHANGED, nil, 0);
self.SetReg(FProxy);
end;
//SetReg負責讀寫登錄檔
procedure TSetProxy.SetReg(FMProxy:string);
var
reg: Tregistry;
begin
reg:=Tregistry.Create;
try
reg.RootKey := HKEY_CURRENT_USER;
if reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/Internet Settings', True) then
begin
reg.Writestring('ProxyServer', FMproxy);
reg.WriteInteger('ProxyEnable', integer(true));
end
finally
reg.CloseKey;
reg.free;
end;
end;
constructor TSetProxy.Create(Proxy,Port:string);
begin
self.Proxy:=Proxy;
self.port:=Port;
end;
end.
測試執行都恨正常.