使用WebBrowser控件设置和取消代理的问题。

tudouding 2009-12-02 01:18:38
我用下面的方法实现了设置代理,但是用什么方法能够取消所设置的代理呢?

设置代理:
public struct Struct_INTERNET_PROXY_INFO
{

public int dwAccessType;

public IntPtr proxy;

public IntPtr proxyBypass;

}

[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

public void RefreshIESettings(string strProxy)
{

const int INTERNET_OPTION_PROXY = 38;
const int INTERNET_OPEN_TYPE_PROXY = 3;

Struct_INTERNET_PROXY_INFO struct_IPI;


struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);
struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");

IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));

Marshal.StructureToPtr(struct_IPI, intptrStruct, true);

bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));


}

private void button5_Click(object sender, EventArgs e)
{
RefreshIESettings(this.getIPStr());
string url = "http://www.google.cn";
webBrowser1.Navigate(url,null,null,null);
}


高分求WebBrowser取消代理的方法。
...全文
737 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyale 2010-08-11
  • 打赏
  • 举报
回复
在 RefreshIESetting 里面添加:
const int INTERNET_OPEN_TYPE_DIRECT = 1;

struct_IPI.dwAccessType 的赋值修改为:
if (String.IsNullOrEmpty(strProxy)) struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;
else struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
其它不用修改,只要strProxy为空(""),即取消Proxy 。

已测试通过。
zhyale 2009-12-22
  • 打赏
  • 举报
回复
顶 。
同样的问题,希望有C#的实现。
tudouding 2009-12-03
  • 打赏
  • 举报
回复
2楼和4楼的代码看不懂呀,能注释一下吗??
宝_爸 2009-12-02
  • 打赏
  • 举报
回复
下面的代码来自http://www.codeproject.com/KB/IP/changeproxy1.aspx
虽然是C++的,但是你能看到如何使用InternetSetOption 取消代理。


BOOL DisableConnectionProxy(LPCTSTR conn_name)
{
//conn_name: active connection name.
INTERNET_PER_CONN_OPTION_LIST list;
BOOL bReturn;
DWORD dwBufSize = sizeof(list);
// Fill out list struct.
list.dwSize = sizeof(list);
// NULL == LAN, otherwise connectoid name.
list.pszConnection = conn_name;
// Set three options.
list.dwOptionCount = 1;
list.pOptions = new INTERNET_PER_CONN_OPTION[list.dwOptionCount];
// Make sure the memory was allocated.
if(NULL == list.pOptions)
{
// Return FALSE if the memory wasn't allocated.
OutputDebugString("failed to allocat memory in DisableConnectionProxy()");
return FALSE;
}
// Set flags.
list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT ;
// Set the options on the connection.
bReturn = InternetSetOption(NULL,
INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
// Free the allocated memory.
delete [] list.pOptions;
InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
return bReturn;
}
liherun 2009-12-02
  • 打赏
  • 举报
回复
学习,没有用过这个控件
netstray 2009-12-02
  • 打赏
  • 举报
回复
帮你顶一下
蒋晟 2009-12-02
  • 打赏
  • 举报
回复
> Как для TWebBrowser пpогpаммно по несколько pаз менять адpес и поpт
> пpокси-сеpвеpа во вpемя соединения ???
> Чеpез NMHTTP тоже никак не получается.


var
dreserved:dword;
x:dword;
p : INTERNET_PROXY_INFO;
begin
/
p.dwAccessType := ........;
p.lpszProxyBypass := .....;
p.lpszProxy := ......;
x := sizeof(p);
dreserved := 0;
if UrlMkSetSessionOption({INTERNET_OPTION_REFRESH}
INTERNET_OPTION_PROXY,@p,x,dreserved)<>S_Ok
then begin
....
end;

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧