C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: VBフォームアプリケーションからIPアドレスを変更する方法


(過去ログ 135 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■79710 / inTopicNo.1)  VBフォームアプリケーションからIPアドレスを変更する方法
  
□投稿者/ OK("Farm") (1回)-(2016/05/08(Sun) 11:43:28)

分類:[VB.NET/VB2005 以降] 

フォームに設置した5つのテキストボックスに
IPアドレス、サブネットマスク、デフォルトゲートウェイ
優先DNSサーバー、代替DNSサーバーを入力してもらい、
コマンドボタンを押すと、各々のアドレスが反映または再起動後に反映される、
というようなプログラムを作成したいのですが、
バッチファイルからだと、

netsh interface ipv4 set address name="アダプター名" static 192.168.0.0 255.255.255.0 192.168.0.0 1
netsh interface ipv4 set dnsservers name="アダプター名" static 0.0.0.0 primary
netsh interface ipv4 add dnsservers name="アダプター名" 0.0.0.0 index=2

この記述で問題なく変更されるものの、
これを上記方法のようにテキストボックスとコマンドボタンで行うには
どういった記述になるのか見当もつきません。

最初は、インターネットプロトコルバージョン4の
ショートカットコマンドをVB上で走らせて、
設定ウインドウを表示させる方法を考えましたが、
どこにもそのようなコマンドはなく、
そもそもアダプター名がPCによって異なるため
まずアダプター名を取得するところからやらなければならないような気がします。

フリーソフトでそういったものがあるにはありますが、
自作アプリの一部としてこの機能を加えたいと考えております。

よろしくお願いいたします。
引用返信 編集キー/
■79717 / inTopicNo.2)  Re[1]: VBフォームアプリケーションからIPアドレスを変更する方法
□投稿者/ 魔界の仮面弁士 (700回)-(2016/05/09(Mon) 03:04:40)
No79710 (OK("Farm") さん) に返信
> netsh interface ipv4 set address name="アダプター名" static 192.168.0.0 255.255.255.0 192.168.0.0 1
> netsh interface ipv4 set dnsservers name="アダプター名" static 0.0.0.0 primary
> netsh interface ipv4 add dnsservers name="アダプター名" 0.0.0.0 index=2

バッチファイル同様、管理者権限での実行が前提とはなりますが:


(案1) 上記のコマンドを Process.Start メソッドを用いて呼び出す

(案2) System.Management 名前空間のクラスを通じて、WMI の Win32_NetworkAdapterConfiguration クラスの
 EnableStatic メソッド、SetGateways メソッド、SetDNSServerSearchOrder メソッドなどを呼び出す
引用返信 編集キー/
■79779 / inTopicNo.3)  Re[2]: VBフォームアプリケーションからIPアドレスを変更する方法
□投稿者/ OK("Farm") (2回)-(2016/05/15(Sun) 19:46:55)
2016/05/15(Sun) 19:51:33 編集(投稿者)
2016/05/15(Sun) 19:51:21 編集(投稿者)

No79717 (魔界の仮面弁士 さん) に返信
> ■No79710 (OK("Farm") さん) に返信
>>netsh interface ipv4 set address name="アダプター名" static 192.168.0.0 255.255.255.0 192.168.0.0 1
>>netsh interface ipv4 set dnsservers name="アダプター名" static 0.0.0.0 primary
>>netsh interface ipv4 add dnsservers name="アダプター名" 0.0.0.0 index=2
>
> バッチファイル同様、管理者権限での実行が前提とはなりますが:
>
>
> (案1) 上記のコマンドを Process.Start メソッドを用いて呼び出す
>
> (案2) System.Management 名前空間のクラスを通じて、WMI の Win32_NetworkAdapterConfiguration クラスの
>  EnableStatic メソッド、SetGateways メソッド、SetDNSServerSearchOrder メソッドなどを呼び出す


魔界の仮面弁士 様、ご回答ありがとうございました。

後者の案は私には敷居が高かったため、
やはり前者の案を基に組むことにしました。

ただ、テキストボックスの文字列をbatに代入することができません。
VB通常のやり方で文字列型変数を宣言し、下記のようにbat内に組み込んだのですが、エラーを返しました。

Dim strText As String = ComboBox1.Text
Dim psi As New System.Diagnostics.ProcessStartInfo()

psi.FileName = "cmd.exe"
psi.Verb = "runas"

psi.Arguments = "/c netsh Interface ipv4 Set address name=strText Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2"



直接、アダプター名を指定すると、正常に走ります。

    psi.Arguments = "/c netsh Interface ipv4 Set address name=""ローカル エリア接続"" Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=""ローカル エリア接続"" 8.8.4.4 index=2"



純粋にbat内での変数代入の文法が分からず、
色々試したり検索も当然しましたが、同じケースが見つけられませんでした。

ご教示いただけたら幸いです。
どうかよろしくお願いいたします。
引用返信 編集キー/
■79780 / inTopicNo.4)  Re[3]: VBフォームアプリケーションからIPアドレスを変更する方法
□投稿者/ 魔界の仮面弁士 (703回)-(2016/05/15(Sun) 21:45:18)
No79779 (OK("Farm") さん) に返信
> 純粋にbat内での変数代入の文法が分からず、

%1 で受け取れます。
http://capm-network.com/?tag=Windowsバッチファイル引数

それを用意しておけば、
 psi.FileName = "C:\foolder\file.bat"
 psi.Arguments = TextBox1.Text
のようにして渡せるかと。


> Dim strText As String = ComboBox1.Text
> psi.Arguments = "/c netsh Interface ipv4 Set address name=strText Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2"
> psi.Arguments = "/c netsh Interface ipv4 Set address name=""ローカル エリア接続"" Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=""ローカル エリア接続"" 8.8.4.4 index=2"



VB2015 であれば
 psi.Arguments = $"/c netsh Interface ipv4 Set address name=""{strText}"" Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2"
のように書けます。

VB2015 未満の場合は、従来通りに文字列連結演算子を用いて
 psi.Arguments = "/c netsh Interface ipv4 Set address name=""" & strText & """ Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2"
のように書くことになります。

あるいは String.Format を用いて
 psi.Arguments = String.Format("/c netsh Interface ipv4 Set address name=""{0}"" Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2", strText)
のようにすることもできますね。
引用返信 編集キー/
■79781 / inTopicNo.5)  Re[4]: VBフォームアプリケーションからIPアドレスを変更する方法
□投稿者/ OK("Farm") (3回)-(2016/05/15(Sun) 22:35:04)
2016/05/15(Sun) 22:36:19 編集(投稿者)

No79780 (魔界の仮面弁士 さん) に返信
> ■No79779 (OK("Farm") さん) に返信
>>純粋にbat内での変数代入の文法が分からず、
>
> %1 で受け取れます。
> http://capm-network.com/?tag=Windowsバッチファイル引数
>
> それを用意しておけば、
>  psi.FileName = "C:\foolder\file.bat"
>  psi.Arguments = TextBox1.Text
> のようにして渡せるかと。
>
>
>>Dim strText As String = ComboBox1.Text
>>psi.Arguments = "/c netsh Interface ipv4 Set address name=strText Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2"
>>psi.Arguments = "/c netsh Interface ipv4 Set address name=""ローカル エリア接続"" Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=""ローカル エリア接続"" 8.8.4.4 index=2"
>
>
>
> VB2015 であれば
>  psi.Arguments = $"/c netsh Interface ipv4 Set address name=""{strText}"" Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2"
> のように書けます。
>
> VB2015 未満の場合は、従来通りに文字列連結演算子を用いて
>  psi.Arguments = "/c netsh Interface ipv4 Set address name=""" & strText & """ Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2"
> のように書くことになります。
>
> あるいは String.Format を用いて
>  psi.Arguments = String.Format("/c netsh Interface ipv4 Set address name=""{0}"" Static 192.168.0.0 255.255.255.0 192.168.0.0 1 & netsh interface ipv4 set dnsservers name=""イーサネット"" static 8.8.8.8 primary & netsh interface ipv4 add dnsservers name=strText 8.8.4.4 index=2", strText)
> のようにすることもできますね。


魔界の仮面弁士 様、迅速かつ的確なご回答を本当にありがとうございました。

喉から手が出るほど欲しかった情報が期待以上の形で返ってきたことに大変、喜びを感じております。

こちらが開発環境をお伝えしていなかったため、お手間を取らせてしまったようで申し訳なく思います。
VB2015での開発ですから $"〜""{}""" こちらの記述で見事に走りました。感服いたします。

また、VB2015 未満の場合ですと """ & strText & """ で通るというようなご指摘も非常に有益な情報でした。
ExcelVBAやAccessVBAをかじってきた私からすれば、VBの文法はほぼ別物であると捉えていましたが、
2015未満ですと、文字列連結演算子を用いることができるのだと初心者ながら感動いたしました。

あとは最初のご回答にあった(案2)を理解し、アクティブなアダプター名の自動取得を可能にすれば、
実用化が現実になりそうです。

今後、自己解決が難しい疑問にぶつかった際は、こちらを利用させていただきます。
魔界の仮面弁士 様、またご縁がありましたらよろしくお願いいたします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -