個人用にプロキシチェックPGを作ろうと思っているのですが
IEを使ってurlをGET出来るかどうかでチェックするのがいちばん簡単に出来そうです。
その場合、インターネットオプションでproxyの設定を自動的に切り替える必要があります。
私の質問はインターネットオプション(プロキシの設定だけで構いません)をVBで変更する方法をお教え願いたいのです。
はじめまして。
要するに、
「プロキシアドレスとポート番号、プロキシ使用の有無の変更をVB側から変更する」 ということでよろしいでしょうか?
それでしたら、レジストリをいじってやる必要があると思います。
具体的には、
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings にある
ProxyEnable //(プロキシ使用の有無) 値:1 or 0
ProxyServer //(プロキシアドレス&ポート番号) 値:192.168.1.1:80(例) で出来ると思います。
レスありがとうございます。
>「プロキシアドレスとポート番号、プロキシ使用の有無の変更をVB側から変更する」 ということでよろしいでしょうか?
まさにその通りです。
>レジストリをいじってやる必要があると思います。
レジストリをいじる方法が今は分かりませんが、これだけヒントを貰えば
なんとか自分で調べてできそうです。
成功か失敗かの報告は遅れそうですが、なんとかがんばってみます。
ありがとうございました。
上記内容と全く同じ事をしようとしていまして
このスレッドが見つかりました。
レジストリの内容を変更することは
できたのですが、設定が反映されません。
どうもレジストリの更新をやらないと駄目みたいなのですが
その方法がわかりません。
よろしくお願いします。
自己レスです
たかみちえさんが発表している
IEProxyOnOffツールのソフトを参考にして更新ができました。
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, 0
で更新ができるようになったのですが
変更される時とそうでない時があります。
IEを一旦終了すると反映されるみたいですが
これをIEを起動したままで変更したいです
なにかいい方法はないでしょうか?
よろしくお願いします。
IEを改造する(できるわけないか。。。)
または
IEの表示しているページを取得してIEを終了後、再起動して
元のページを表示してやるとか
http://www.codeproject.com/internet/changeproxy1.asp
InternetSetOption APIのサンプル(C++)ではいかがでしょうか?
333様、Inet様
ご指導おりがとうございます。
333様の方法で実施することにしました。
Cのサンプルはわたしにとっては未知のせかいで(^^;
まだまだ勉強をしないとと思った次第です
どうもありがとうございました。
解決とは思いますが、
http://www.codeproject.com/internet/changeproxy1.asp
のサンプルをVB6に移してみました。
機会があれば試してみてください。
' Form1.frm
Option Explicit
Private Sub Command1_Click(Index As Integer)
Dim conn_name As String
Dim proxy_full_addr As String
conn_name = "RAS接続名"(LANの場合、vbNullString)
proxy_full_addr = "プロキシアドレス:ポート"(例 "62.81.236.23:80")
Select Case Index
Case 0 ' set proxy
Call SetConnectionOptions(conn_name, proxy_full_addr)
Case 1 ' disable proxy
Call DisableConnectionProxy(conn_name)
End Select
End Sub
' Module1.bas
Option Explicit
Private Type INTERNET_PER_CONN_OPTION
dwOption As Long
dwValue1 As Long
dwValue2 As Long
End Type
Private Type INTERNET_PER_CONN_OPTION_LIST
dwSize As Long
pszConnection As Long
dwOptionCount As Long
dwOptionError As Long
pOptions As Long
End Type
Private Const INTERNET_PER_CONN_FLAGS As Long = 1
Private Const INTERNET_PER_CONN_PROXY_SERVER As Long = 2
Private Const INTERNET_PER_CONN_PROXY_BYPASS As Long = 3
Private Const PROXY_TYPE_DIRECT As Long = &H1
Private Const PROXY_TYPE_PROXY As Long = &H2
Private Const INTERNET_OPTION_REFRESH As Long = 37
Private Const INTERNET_OPTION_SETTINGS_CHANGED As Long = 39
Private Const INTERNET_OPTION_PER_CONNECTION_OPTION As Long = 75
Private Declare Function InternetSetOption _
Lib "wininet.dll" Alias "InternetSetOptionA" ( _
ByVal hInternet As Long, ByVal dwOption As Long, _
lpBuffer As Any, ByVal dwBufferLength As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" ( _
ByVal hMem As Long) As Long
'//set proxy
Public Function SetConnectionOptions(ByVal conn_name As String, _
ByVal proxy_full_addr As String) As Long
'//conn_name: active connection name. (LAN = "")
'//proxy_full_addr : eg "210.78.22.87:8000"
Dim list As INTERNET_PER_CONN_OPTION_LIST
Dim bReturn As Long
Dim dwBufSize As Long
Dim options(0 To 2) As INTERNET_PER_CONN_OPTION
Dim abConnName() As Byte
Dim abProxyServer() As Byte
Dim abProxyBypass() As Byte
dwBufSize = Len(list)
'// Fill out list struct.
list.dwSize = Len(list)
'// NULL == LAN, otherwise connectoid name.
abConnName() = StrConv(conn_name & vbNullChar, vbFromUnicode)
list.pszConnection = VarPtr(abConnName(0))
'// Set three options.
list.dwOptionCount = 3
'// Set flags.
options(0).dwOption = INTERNET_PER_CONN_FLAGS
options(0).dwValue1 = PROXY_TYPE_DIRECT Or PROXY_TYPE_PROXY
'// Set proxy name.
options(1).dwOption = INTERNET_PER_CONN_PROXY_SERVER
abProxyServer() = StrConv(proxy_full_addr & vbNullChar, vbFromUnicode)
options(1).dwValue1 = VarPtr(abProxyServer(0)) '//"http://proxy:80"
'// Set proxy override.
options(2).dwOption = INTERNET_PER_CONN_PROXY_BYPASS
abProxyBypass() = StrConv("local" & vbNullChar, vbFromUnicode)
options(2).dwValue1 = VarPtr(abProxyBypass(0))
list.pOptions = VarPtr(options(0))
'// Make sure the memory was allocated.
If (0& = list.pOptions) Then
'// Return FALSE if the memory wasn't allocated.
Debug.Print "failed to allocat memory in SetConnectionOptions()"
SetConnectionOptions = 0
End If
'// Set the options on the connection.
bReturn = InternetSetOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)
'// Free the allocated memory.
Call GlobalFree(list.pOptions)
Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, ByVal 0&, 0)
Call InternetSetOption(0, INTERNET_OPTION_REFRESH, ByVal 0&, 0)
SetConnectionOptions = bReturn
End Function
'//disable proxy
Public Function DisableConnectionProxy(ByVal conn_name As String) As Long
'//conn_name: active connection name. (LAN = "")
Dim list As INTERNET_PER_CONN_OPTION_LIST
Dim bReturn As Long
Dim dwBufSize As Long
Dim options(0) As INTERNET_PER_CONN_OPTION
Dim abConnName() As Byte
dwBufSize = Len(list)
'// Fill out list struct.
list.dwSize = Len(list)
'// NULL == LAN, otherwise connectoid name.
abConnName() = StrConv(conn_name & vbNullChar, vbFromUnicode)
list.pszConnection = VarPtr(abConnName(0))
'// Set three options.
list.dwOptionCount = 1
'// Set flags.
options(0).dwOption = INTERNET_PER_CONN_FLAGS
options(0).dwValue1 = PROXY_TYPE_DIRECT
list.pOptions = VarPtr(options(0))
'// Make sure the memory was allocated.
If (0 = list.pOptions) Then
'// Return FALSE if the memory wasn't allocated.
Debug.Print "failed to allocat memory in DisableConnectionProxy()"
DisableConnectionProxy = 0
End If
'// Set the options on the connection.
bReturn = InternetSetOption(0, INTERNET_OPTION_PER_CONNECTION_OPTION, list, dwBufSize)
'// Free the allocated memory.
Call GlobalFree(list.pOptions)
Call InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, ByVal 0&, 0)
Call InternetSetOption(0, INTERNET_OPTION_REFRESH, ByVal 0&, 0)
DisableConnectionProxy = bReturn
End Function
VB初心者です、上記サンプル私のような初心者には大変たすかります。
上のプログラムを実行すると1度はうまく変更できますが、再度変更を行おうとするとプログラムが強制終了してしまいます。
ツイート | ![]() |