質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

解決済

1回答

23751閲覧

WindowsのProxy設定をレジストリの変更で行う場合に必要な操作

akainem

総合スコア40

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

0クリップ

投稿2020/04/22 09:32

初めまして。akaiと申します。

1.行っている事

Windows10で、コマンドラインでレジストリを変更することでプロキシを設定しています。
具体的には、下記のレジストリキーにプロキシサーバーを設定し、

Key: HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer Type: REG_SZ Value: socks=localhost:10900

さらに下記のレジストリキーを変更することで、プロキシの有効|無効を切り替えております。

Key: HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable Type: REG_DWORD Value: 1(Enable) | 0(Disable)

設定が適用されたかどうか(=接続がプロキシ経由に変更されたかどうか)は、https://whatismyipaddress.com/に接続することで確認しています。

2.発生している問題

問題は、上記1.に書きました方法では、設定がすぐには適用されない事です
GUIでプロキシサーバーの設定を変更した場合は、ダイアログボックスのOKボタンを押下すれば、すぐに適用され、プロキシ経由の接続となります。
しかし、上記1.に書きました方法でレジストリからプロキシをEnableにしても、そのままではプロキシ経由の接続に変更されず、プロキシ設定前の接続で接続できる状態が継続し、この時ブラウザを再起動しても変更されず、次のいずれかの操作を行ってはじめて、プロキシ経由の接続に変更されます。

  • インターネット接続を一旦切断し、再接続する
  • 「ネットワークのトラブルシューティングツール」を実行し、「問題を検出しています」の画面が完了し、「~いくつかのWebサイトにアクセスできることが確認されました」と表示(つまり何も修復や設定変更は行われていないはず)されたとき

3.実現したい事、教えて頂きたい事

コマンドラインで行ったプロキシの設定をすぐに反映させたいのですが、
上記1.のレジストリの変更の後に、足りない操作は何でしょうか?
上記1.のレジストリの変更により、GUIの操作で変更される項目は全て変更できているはずだと思うのですが、なぜ再接続などをしないと、反映されないのでしょうか?
WindowsのダイアログボックスのOKボタンを押下するときに、何かコマンドが実行されるのでしょうか?
(と思い、Win32 APIタグをこの質問に付けました。)

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings のレジストリについて、もともとそのレジストリ設定はInternet Explorerとその関連するコンポーネントでWindows内において共通で使われているもので、設定の内容はマイクロソフトが公式に公開しているものではなく、レジストリ設定をハック(<悪い意味ではありません)されたものが長い間に周知されたものでしかありません。もしかしたらレジストリの詳細内容は今や公式に案内されている部分もあるかもしれませんが、全体の動きとしては未サポートのはずです。特に、Microsoft Edgeが公式のブラウザーになってからは、使っていなかった設定データだと思います。

ではユーザーがその設定を手動で変えた場合に、いつ反映するかというとそれも非公式なもので、確実なのはユーザーがいったんログオフ(サインアウト)して再度ログオン(サインイン)したときにユーザープロファイルが再読み込みされたときと、質問者さんが既にご指摘の部分、「WindowsのダイアログボックスのOKボタンを押下するとき」です。OKボタンを押すと効くのは、その設定データを扱うアプリケーションそのものだからです。ブラウザーを再起動しても効かない場合があるのは、ブラウザーは単なるUIを持つ外側のアプリケーションであり、設定を取り扱うコアとなるプログラムは別にあり、それがWindows全体のインターネット接続設定を取り扱っている為です。ですので、ユーザーが手動でレジストリ設定を変更したときに即、設定を反映させるのは難しいかと思います。

まぁ、あと簡単に考えられるのは「インターネットのプロパティ」設定画面は以下のコマンドラインで開くので、「ローカルエリアネットワーク(LAN)の設定」画面で[OK]ボタンをプログラムで押せるよう、がんばってボタン押下をシミュレートする、でしょうか。

CMD

1C:>C:\Windows\System32\rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl

ちなみにソフトウェアによってはWinHTTPと言う別のインターネット関連技術(と設定項目)を使います。

投稿2020/04/22 10:34

編集2020/04/22 10:39
dodox86

総合スコア9254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akainem

2020/04/22 12:21 編集

dodox86様 ありがとうございます。理解しました。 また、アドバイスをありがとうございました! 教えて頂いたように、OKボタンを押すように組むことにしました。 「インターネットのプロパティ」設定画面の「接続」タブを直接`control.exe Inetcpl.cpl,Connections,4`で開けるようでしたので、力業ですが下記のようにしまして、これでプロキシ設定がすぐに反映されるようにできました。 しょっちゅう変更したかったので、大変便利です。 お世話になりました。 ``` Set objWs = CreateObject("WScript.Shell") objWs.Run("control.exe Inetcpl.cpl,Connections,4") For i=0 To 5000 ret = objWs.AppActivate("インターネットのプロパティ") If ret = True Then objWs.Sendkeys "{tab}{tab}{tab}{tab}{enter}" For j=0 To 5000 ret = objWs.AppActivate("ローカル エリア ネットワーク (LAN) の設定") If ret = True Then objWs.Sendkeys "{enter}{tab}{enter}" Exit For End If WScript.Sleep 1 Next Exit For End If WScript.Sleep 1 Next WScript.Quit(0) ```
akainem

2020/04/22 12:40

せっかくですので、有効|無効をトグルするVBSを記載します。どなたかの参考になればと思います。 ``` Set objWs = CreateObject("WScript.Shell") strRegKeyProxyEnable = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable" If objWs.RegRead(strRegKeyProxyEnable) = 0 Then intNewStatus = 1 strNewStatus = "Enabled" 'Start ssh tunnel objWs.Run "ssh -D 10900 server", vbHide, False Else intNewStatus = 0 strNewStatus = "Disabled" 'Stop ssh tunnel For Each p In GetObject("winmgmts:\.\root\cimv2").ExecQuery("select * from Win32_Process where CommandLine Like '%ssh%-D%10900%'") 'MsgBox p.CommandLine p.ProcessId p.Terminate Next End If 'Toggle registry value to the new status objWs.RegWrite strRegKeyProxyEnable, intNewStatus, "REG_DWORD" MsgBox strNewStatus, , "Socks Proxy" 'Push OK button objWs.Run("control.exe Inetcpl.cpl,Connections,4") For i=0 To 5000 ret = objWs.AppActivate("インターネットのプロパティ") If ret = True Then objWs.Sendkeys "{tab}{tab}{tab}{tab}{enter}" For j=0 To 5000 ret = objWs.AppActivate("ローカル エリア ネットワーク (LAN) の設定") If ret = True Then objWs.Sendkeys "{enter}{tab}{enter}" Exit For End If WScript.Sleep 1 Next Exit For End If WScript.Sleep 1 Next Set objWs = Nothing WScript.Quit(0) ```
dodox86

2020/04/22 12:46

こういう、回答を踏まえてのその後の進捗のご報告はとても良いと思いますし、回答者としてもうれしいものですね。後で同じ問題にあたった方が居ればまた、役に立つと思います。どうもありがとうございます。>akainemさん
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問