シス研部室の”SYSLAN”プロキシの設定を自動化したかった

本記事は SYSKEN Advent Calendar 2015 11日目の記事です。
どうも、RSです。ノンジャンルで書けということで私の若干のイライラを解消してついでに記事にしようと思います。

さて、今回のテーマはタイトル通りプロキシ設定の自動化です。というのも、システム研究部には”SYSLAN”と言うSSIDのWiFiが飛んでいます。これに接続してインターネットに接続しようとすると何やら奇妙な警告が出るのです。
そう、このSYSLANはプロキシを設定しなくてはならないのです。
まあ、これが面倒なのです。

では自動化するに際して何を使ってやろうかと悩んだ結果、C#とか言う奴を使うことにしました。今年はC#と楽しい一年を過ごし(参考)…てはいないのですが憎めない奴ということで使っていきます。

まず、現状のプロキシ設定のやり方ですが、


1.コントロールパネルを開く
2.インターネットプロパティを開く
3.接続タブを開く
4.LANの設定を押す
5.画像のチェックボックスを押す

プロキシの設定
6.OKを押す

長い…

プロキシを自動切り替えする方針として、現在接続しているSSIDを検出して設定したものの場合プロキシ設定を切り替えるというものにしようとしました。
ところが…

標準の.NET FrameworkにもWinRTにも無線LANのSSIDを取得可能なAPIは用意されていない

ん?

まあ、そんなことで方針変更を余儀なくされたというわけです。
Androidとかではあったんですけどね。さすがWindows!

結局のところ方針としては、

1.ネットワークに接続されているか確認
2.インターネットに接続されているか確認
3.プロキシ切り替えを上から判定
4.プロキシ切り替えでインターネット接続が改善されたか調べる

と言った感じになり、プログラムもインターネット接続に問題が無いか調べるといったスタンスのものに変更せざるを得なくなりました
で、結局完成したのが

1.ネットワークに接続されているか確認
2.インターネットに接続されているか確認
3.プロキシ切り替えを上から判定

4.プロキシ切り替えでインターネット接続が改善されたか調べる
プロキシ切り替えアプリ
何というか…
どうやら急ごしらえでできるような簡単なことではなかったようです。

ソースの中で、プロキシのチェックボックスを切り替えるものがあるのですが、そこは

//キーを開く
Microsoft.Win32.RegistryKey regkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true);
//キーを読み込み、TrueかFalseを判定
int intValue = (int)regkey.GetValue("ProxyEnable");
//整数(32ビット)を書き込む
if (intValue == 0)
{
//True(プロキシサーバーを使用する)
regkey.SetValue("ProxyEnable", 1);
Console.WriteLine("プロキシ On");
System.Threading.Thread.Sleep(2000);
}
else if (intValue == 1)
{
//False(プロキシサーバーを使用しない)
regkey.SetValue("ProxyEnable", 0);
Console.WriteLine("プロキシ Off");
System.Threading.Thread.Sleep(2000);
}
regkey.Close();

といった感じでレジストリのキーをT/F置き換えることで実現させています。
プロキシ_レジストリ

まあそんな訳で、こいつをスタートアップに登録してやればあとは完成(?)です。

C:\ユーザー\\AppData\Roaming\Microsoft\Windows\スタート メニュー\プログラム\スタートアップ

に追加して完了です。

何かひどい出来ですので問題指摘、よろしくお願いします。
GitHub:Proxy Checkbox
参考:SignalRのコネクション切断時に自動再接続する-xin9le.net

次回は土日突入ということでOB枠です!12日目は92thunder先輩でお送りします。


コメントを残す

メールアドレスが公開されることはありません。