インターネットオプションを変更させるには?

解決


もんちっち  2003-12-18 22:26:25  No: 110800

個人用にプロキシチェックPGを作ろうと思っているのですが
IEを使ってurlをGET出来るかどうかでチェックするのがいちばん簡単に出来そうです。
その場合、インターネットオプションでproxyの設定を自動的に切り替える必要があります。
私の質問はインターネットオプション(プロキシの設定だけで構いません)をVBで変更する方法をお教え願いたいのです。


ク→チ  2003-12-18 23:51:57  No: 110801

はじめまして。
要するに、
「プロキシアドレスとポート番号、プロキシ使用の有無の変更をVB側から変更する」  ということでよろしいでしょうか?

それでしたら、レジストリをいじってやる必要があると思います。
具体的には、
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings  にある
  ProxyEnable  //(プロキシ使用の有無)  値:1 or 0
  ProxyServer  //(プロキシアドレス&ポート番号)  値:192.168.1.1:80(例)  で出来ると思います。


もんちっち  2003-12-19 00:24:55  No: 110802

レスありがとうございます。
>「プロキシアドレスとポート番号、プロキシ使用の有無の変更をVB側から変更する」  ということでよろしいでしょうか?

まさにその通りです。

>レジストリをいじってやる必要があると思います。

レジストリをいじる方法が今は分かりませんが、これだけヒントを貰えば
なんとか自分で調べてできそうです。
成功か失敗かの報告は遅れそうですが、なんとかがんばってみます。
ありがとうございました。


ひろんた  2005-03-17 23:27:04  No: 110803

上記内容と全く同じ事をしようとしていまして
このスレッドが見つかりました。
レジストリの内容を変更することは
できたのですが、設定が反映されません。
どうもレジストリの更新をやらないと駄目みたいなのですが
その方法がわかりません。
よろしくお願いします。


ひろんた  2005-03-18 19:16:38  No: 110804

自己レスです
たかみちえさんが発表している
IEProxyOnOffツールのソフトを参考にして更新ができました。
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, 0
で更新ができるようになったのですが

変更される時とそうでない時があります。
IEを一旦終了すると反映されるみたいですが
これをIEを起動したままで変更したいです
なにかいい方法はないでしょうか?
よろしくお願いします。


333  2005-03-18 21:28:03  No: 110805

IEを改造する(できるわけないか。。。)

または

IEの表示しているページを取得してIEを終了後、再起動して
元のページを表示してやるとか


Inet  2005-03-20 13:30:38  No: 110806

http://www.codeproject.com/internet/changeproxy1.asp
InternetSetOption APIのサンプル(C++)ではいかがでしょうか?


ひろんた  2005-03-22 18:35:17  No: 110807

333様、Inet様

ご指導おりがとうございます。
333様の方法で実施することにしました。
Cのサンプルはわたしにとっては未知のせかいで(^^;
まだまだ勉強をしないとと思った次第です

どうもありがとうございました。


Inet  2005-03-24 04:38:47  No: 110808

解決とは思いますが、
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


ターキー  2006-04-17 06:53:12  No: 110809

VB初心者です、上記サンプル私のような初心者には大変たすかります。
上のプログラムを実行すると1度はうまく変更できますが、再度変更を行おうとするとプログラムが強制終了してしまいます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加