CInternetSession::CInternetSession
CInternetSession(
LPCTSTR pstrAgent = NULL,
DWORD dwContext = 1,
DWORD dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG,
LPCTSTR pstrProxyName = NULL,
LPCTSTR pstrProxyBypass = NULL,
DWORD dwFlags = 0 )
其中:dwAccessType 有几个有效值:
INTERNET_OPEN_TYPE_PRECONFIG 预配置
INTERNET_OPEN_TYPE_DIRECT 直接访问internet
INTERNET_OPEN_TYPE_PROXY 通过CERN代理访问
当用INTERNET_OPEN_TYPE_PRECONFIG时,程序直接从注册表中读取proxy设置,这时如果你的IE设置好了代理,你的程序就可以直接连出去了。
当用INTERNET_OPEN_TYPE_PROXY时,程序采用pstrProxyName 指定的设置。
如果你有C++的编程背景,那这个问题就很简单了:C#中的delegate和C++中的函数指针基本是一回事,C#正是以delegate的形式实现了函数指针。不同的地方在于C#中delegate是类型安全的。如果没有C或者C++的背景知识也没有一点关系。
要理解Delegate,首先,你要明白,它是一个类,他和Class是一个级别的概念,不同在于Class的定义包含字段和方法,而delegate只包含方法的细节。
定义Delegate:
public delegate bool CompareDelegate(int a, int b)
上面语句的含义是:定义了一个委托的实例时,这些实例都要包含一个方法名,并且这个方法必须有两个int型的参数,并且必须返回一个bool型的值。
好,现在就创建一个上面定义的委托的实例
public CompareDelegate myCompare = new CompareDelegate(CompareMethod)
里面的这个CompareMethod是一个方法:
定义如下:
public static bool CompareMethod(int x , int y)
{
bool result = x >y ? true : false
return result
}
怎么使用呢
int a = 10
int b = 15
bool isBigger = myDelegate(a, b)
下面是完整的代码:
using System
using System.Collections.Generic
using System.Text
using Common
namespace ConsoleApplication8
{
//定义委托
public delegate bool CompareDelegate(int a, int b)
public class MyCompare
{
/// <summary>
/// 定义一个方法,符合上面定义的委托所要求的方法细节,返回值为bool型,两个参数分别为int型
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public static bool CompareMethod(int x , int y)
{
bool result = x >y ? true : false
return result
}
}
class Program
{
static void Main(string[] args)
{
//实例化委托并初始化。注意初始化时候,必须包含一个方法的名称,而且这个方法必须符合最初定义委托时候的签名(参数类型和返回值)
CompareDelegate myDelegate = new CompareDelegate(MyCompare.CompareMethod)
//现在我们使用委托实例来比较两个数a和b的的大小
int a = 10
int b = 15
bool isBigger = myDelegate(a, b)
Console.WriteLine(" a >b ?: " + isBigger)
Console.Read()
}
}
}
是不是太简单了。
C#中委托用来干什么呢,当然不是用来实现象上面那样的弱智程序。在C#中一提委托,一般就会引出另外一个术语:事件。C#中事件的实现,正是依赖于delegate。而事件又是一个很重要的概念,只有真正理解了委托,才能打好基础,真正的弄明白事件。
希望有帮助
[Delphi]试试
用程序更改 IE 的代理服务器(Proxy)设置
通过设置注册表来实现,设置完毕立即生效,不用重新启动 IE 浏览器。
参数说明:
Proxy:代理服务器 IP 地址;
Port:端口号;
ByPass:对所有的协议均使用相同的代理服务器;
bEnabled:是否使用代理服务器(代理服务器是否生效)
函数代码:
// uses Wininet, registry
function ChangeProxy(const Proxy, Port,ByPass: stringconst bEnabled: boolean = True): boolean
var
reg: Tregistry
info: INTERNET_PROXY_INFO
Fproxy: string
begin
Result := False
FProxy :=Format('%s:%s',[Proxy,Port])
reg :=Tregistry.Create
try
reg.RootKey :=HKEY_CURRENT_USER
if reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Internet Settings', True) then
begin
reg.Writestring('ProxyServer', Fproxy)
reg.WriteInteger('ProxyEnable', integer(bEnabled))
info.dwAccessType :=INTERNET_OPEN_TYPE_PROXY
info.lpszProxy :=pchar(proxy)
info.lpszProxyBypass :=pchar(ByPass)
InternetSetOption(nil, INTERNET_OPTION_PROXY, @info, SizeOf(Info))
InternetSetOption(nil, INTERNET_OPTION_SETTINGS_CHANGED, nil, 0)
Result:=True
end
finally
reg.CloseKey
reg.free
end
end
调用:
procedure TForm1.Button1Click(Sender: TObject)
begin
ChangeProxy('202.99.29.27','80','1',true)
end
取消:
procedure TForm1.Button2Click(Sender: TObject)
begin
ChangeProxy('202.99.29.27','80','1',false)
end
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)