HanDs
管理员

[Visual Studio文章] VB设置IE代理 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

一般设置IE浏览器的代理服务器可以这样设置:单击IE菜单栏中的“工具(T)”-“Internet 选项(O)...”菜单。打开“Internet 选项”对话框。然后单击“连接”选项卡。在这里,拨号上网用户可以在“拨号和虚拟专用网络设置(N)”下面选择一个拨号连接,然后单击旁边的“设置(S)...”按钮,打开对话框之后就可以设置代理服务器了。局域网用户可以单击“局域网(LAN)设置”中的“局域网设置(L)”按钮来设置代理服务器。
但是如果我们想用自己编写的程序设置,那该怎么办?我经过几番周折,得知了HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections子键下存储着代理务器的设置。打开注册表,然后展开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections子键,看到右边的窗口全部都是二进制的键值项。其中有以我自己创建的几个拨号连接的名字命名的键值项。另外还有两个名字是“DefaultConnectionSettings”和“SavedLegacySettings”的键值项。这些键值项的键值就存储着IE的代理服务器的信息。不同的拨号连接有着不同的代理服务器设置。分别存储在以各个拨号连接为名称的键值项中,局域网的代理服务器设置存储在“DefaultConnectionSettings”键值项中。至于怎么设置和获取代理服务器的相关信息,就请看下面的代码注释吧!
新建一个EXE工程,在表单上添加两个文本框Text1和Text2,Text1存放拨号连接的名称,就是注册表中以各个拨号连接的名称命名的键值项的名字,Text2存放代理服务器的地址和端口,格式 代理服务器地址:端口号。一个复选框Check1,决定是否启用代理服务器。一个按钮Command1,使设置的代理服务器地址写到注册表中。

Option Explicit
'打开注册表的函数
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
'读取注册表的函数
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
'设置注册表的函数
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
'关闭注册表的函数
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

'下面这两项连起来就是注册表中存储有关连接的代理服务器的信息的注册表项
Private Const HKEY_CURRENT_USER = &H80000001
Private Const sKey = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections"

'这句声明表示是以二进制方式打开注册表
Private Const REG_BINARY = 3 ' Free form binary

'下面的这些声明是操作注册表的权限,最后一个声明 KEY_ALL_ACCESS 就是把所有的权限都打开了
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20
Private Const SYNCHRONIZE = &H100000
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))

Private Sub Command1_Click()
'hKey接受打开注册表项的句柄,lenData接受要获取的数据的长度
Dim hKey As Long, lenData As Long
'以所有可操作的权限打开注册表,并把打开的注册表的句柄保存到 hKey 变量中
RegOpenKeyEx HKEY_CURRENT_USER, sKey, 0, KEY_ALL_ACCESS, hKey
'获取指定连接的数据长度放到 lenData 中
RegQueryValueEx hKey, Trim(Text1.Text), 0, ByVal 0, ByVal vbNullString, lenData
'分配一个长度是 lenData 的字节型变量数组存放数据。存取注册表中二进制的数据必须用字节型变量,也就是 Byte 类型的变量
ReDim bArr(lenData - 1) As Byte
'以二进制的方式获取 lenData 长度的数据并保存到 bArr 数组中
RegQueryValueEx hKey, Trim(Text1.Text), 0, REG_BINARY, bArr(0), lenData

'如果使用代理服务器
If Check1.Value = 0 Then
bArr(8) = 3
'不使用代理服务器
Else
bArr(8) = 1
End If


Dim i As Long, j As Long, s As String
s = Trim(Text2.Text) '变量等于去掉填写代理服务器地址和端口号的文本框中内容的空格的内容
i = Len(s) '获取去掉空格后的代理服务器地址和端口号的长度,以供后面写入注册表中使用
bArr(12) = i '第十三个数组存放代理服务器地址和端口号的长度
For j = 1 To i '循环范围是从1到代理服务器地址和端口号的长度
bArr(j + 15) = Asc(Mid(s, j, 1)) '依次取出代理服务器地址和端口号的单个字符并且把字符转换成字符的ASCII代码,并且依次放到从第17个数组开始的数组
Next j

'把设置后的数组,也就是要设置的信息放到注册表中
RegSetValueEx hKey, Trim(Text1.Text), 0, REG_BINARY, bArr(0), UBound(bArr) + 1

'关闭注册表
RegCloseKey hKey

End Sub

如果需要设置局域网的代理服务器信息,在Text1文本框中输入DefaultConnectionSettings就可以了。
在这里还存放着拨号连接其他的一些信息,大家自己根据需要研究一下吧!


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
VB 设置 IE 代理
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组
快速回复