1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
unit e0_Proxy;
interface
procedure SaveBeginInetSetting;
function RestoreBeginInetSetting:boolean;
function InetSessionToUserSetting(aEnProxy:boolean;
aStrIP,aStrPort:string):boolean;
function InetSessionToRegistrySetting:boolean;
implementation
uses windows,WinInet,UrlMon,
SysUtils;
var spBeginProxyStruct:PInternetProxyInfo;
len_spBeginProxyStruct:DWORD;
procedure SaveBeginInetSetting;
begin
InternetQueryOption
(nil,INTERNET_OPTION_PROXY,nil,len_spBeginProxyStruct);
spBeginProxyStruct:=AllocMem(len_spBeginProxyStruct);
InternetQueryOption
(nil,INTERNET_OPTION_PROXY,spBeginProxyStruct,len_spBegin
ProxyStruct);
end;
function RestoreBeginInetSetting:boolean;
var
dreserved:dword;
x:dword;
p : INTERNET_PROXY_INFO;
begin
result := false;
p.dwAccessType := spBeginProxyStruct^.dwAccessType;
p.lpszProxyBypass := spBeginProxyStruct^.lpszProxyBypass;
p.lpszProxy := spBeginProxyStruct^.lpszProxy;
x := sizeof(p);
dreserved := 0;
if UrlMkSetSessionOption({INTERNET_OPTION_REFRESH}
INTERNET_OPTION_PROXY,@p,x,dreserved)<>S_Ok
then begin
Exit;
end;
result := true;
end;
function InetSessionToUserSetting(aEnProxy:boolean;
aStrIP,aStrPort:string):boolean;
var
p : INTERNET_PROXY_INFO;
x : integer;
dreserved : dword;
begin
result := false;
FillChar(p,sizeof(p),0);
if aEnProxy then begin
p.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
p.lpszProxy := PChar(aStrIP+':'+aStrPort);
end
else begin
p.dwAccessType := INTERNET_OPEN_TYPE_DIRECT;
p.lpszProxy := '';
end;
p.lpszProxyBypass := '';
x := sizeof(p);
dreserved := 0;
if UrlMkSetSessionOption(INTERNET_OPTION_PROXY,@p,x,dreserved)
<>S_OK
then begin
Exit;
end;
result := true;
end;
function InetSessionToRegistrySetting:boolean;
var
hk : HKEY;
s : string;
BufSize : integer;
posStr : integer;
retType : DWORD;
isUsingProxy : DWORD;
begin
result := false;
s := '';
if RegOpenKeyEx(HKEY_CURRENT_USER,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings',
0,
KEY_ALL_ACCESS,
hk) = ERROR_SUCCESS then
begin
BufSize := SizeOf(isUsingProxy);
isUsingProxy := 0;
retType := REG_DWORD;
RegQueryValueEx(hk,
'ProxyEnable',
nil,
@retType,
@isUsingProxy,
@bufSize);
if isUsingProxy > 0 then
begin
SetLength(s, MAX_PATH);
BufSize := length(s);
FillChar(s[1], MAX_PATH, #0);
retType := REG_NONE;
RegQueryValueEx(hk,
'ProxyServer',
nil,
@retType,
@s[1],
@bufSize);
SetLength(s, bufsize);
if bufsize > 0 then
if s[length(s)] = #0 then SetLength(s, length(s)-1);
if length(s) > 0 then
begin
posStr := Pos('http=', LowerCase(s));
if posStr > 0 then
s := Copy(s, posStr+5, length(s));
posStr := Pos(';', s);
if posStr > 0 then
s := Copy(s, 1, posStr-1);
result := InetSessionToUserSetting(true,s,'');
end;
end
else result := InetSessionToUserSetting(false,'','');
RegCloseKey(hk);
end;
end;
end. |
Partager