文章出處

 

IE 代理服務器設置程序實現

分類: Delphi

 

本文其實.沒有什么價值.寫出來也是處于好玩.因為.最近閑的要命.所以總喜歡去些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.

測試運行都恨正常.


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()