DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VBからIPを自動的に取得する設定を変更したい

分類:[.NET]

VBで「IPアドレスを自動的に取得する設定」を変更したいのですが
何か方法は無いでしょうか。
■No22510に返信(さいてーやろーさんの記事)
> VBで「IPアドレスを自動的に取得する設定」を変更したいのですが
> 何か方法は無いでしょうか。

Win32_NetworkAdapterConfiguration クラスのメソッドが使えないでしょうか。
あるいは手抜き案ですが、NETSH コマンドを呼び出すようにするとか。
■No22518に返信(魔界の仮面弁士さんの記事)
> ■No22510に返信(さいてーやろーさんの記事)
>>VBで「IPアドレスを自動的に取得する設定」を変更したいのですが
>>何か方法は無いでしょうか。
>
> Win32_NetworkAdapterConfiguration クラスのメソッドが使えないでしょうか。
> あるいは手抜き案ですが、NETSH コマンドを呼び出すようにするとか。
>

魔界の仮面弁士さん,ありがとうございます。
NETSHというのは使ったことが無いのですが
どのように使えばいいのでしょうか.
■No22522に返信(さいてーやろーさんの記事)
> NETSHというのは使ったことが無いのですが
> どのように使えばいいのでしょうか.

このあたりが参考になるでしょうか。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060809/245475/

他にも、「netsh」で検索することで、サンプルが見つかるかと思います。
あとはそのコマンドを、Process.Start メソッドなり Shell 関数なりで
呼び出してやれば良いのではないかと。
■No22523に返信(魔界の仮面弁士さんの記事)
返信ありがとうございます。
早速ためしてみます。
ちなみに Win32_NetworkAdapterConfiguration
はどのように使うのでしょうか.
■No22524に返信(さいてーやろーさんの記事)
> ちなみに Win32_NetworkAdapterConfiguration
> はどのように使うのでしょうか.

System.Management.DLL を参照設定して使う事になります。
「WMI」というキーワードで検索してみると、情報が得られるでしょう。

たとえば、下記の投稿などが参考になるかと。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200605/06050037.txt

一から十まで掲示板で回答するのは難しいので、現段階では概要だけの
説明しかできませんが、実際に調べてみて(そして試してみて)、その上で
分からないところがあれば、その不明な点を具体的に挙げてもらえれば、
より正確な回答を返せるかと思います。
■No22525に返信(魔界の仮面弁士さんの記事)

返信ありがとうございます。
値の設定などは理解したのですが、
自動取得の設定を取得したり変更したりするには
どのプロパティを使えばいいのでしょうか。
■No22527に返信(さいてーやろーさんの記事)
> 値の設定などは理解したのですが、
> 自動取得の設定を取得したり変更したりするには
> どのプロパティを使えばいいのでしょうか。

たとえば、IP アドレスの取得なら、こんな感じで行えます。
WMI の Win32_NetworkAdapterConfiguration.IPEnabled プロパティの呼び出し例です。

Dim mc As New System.Management.ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As System.Management.ManagementObjectCollection = mc.GetInstances()
For Each mo As System.Management.ManagementObject In moc
 'If CBool(mo.Properties.Item("IPEnabled").Value) Then
 If CBool(mo("IPEnabled")) Then
  Dim IPList() As String = DirectCast(mo("IPAddress"), String())
  For Each IP As String In IPList
   MsgBox(IP)
  Next
 End If
Next

また、IP アドレスを設定するには、InvokeMethod メソッド経由で、WMI の
Win32_NetworkAdapterConfiguration.EnableStatic メソッドを呼び出せば OK です。
こちらは、No22525 にて紹介した URL に書かれていますね。



まずは MSDN ライブラリなどを見て、Win32_NetworkAdapterConfiguration に
どのようなメソッドやプロパティが用意されているのかを調べてみてください。
DHCP を有効化する EnableDHCP メソッドや、静的IP を設定する EnableStatic メソッド、
現在のIP を返す IPAddress プロパティ、他にも多くの機能が見つかるでしょう。


その上で、No22525で書いた「WMI」という技術について調べてみると、
.NET から WMI (の Win32_NetworkAdapterConfiguration クラス)を
利用する方法が見つかるかと思います。


たとえば、ここどぼん!さんのサイトにも、WMI を使った VB のサンプルがあります。
Win32_NetworkAdapterConfiguration ではなく Win32_OperatingSystem クラスの
サンプルですが、WMI がどのような物であるのかを知る足掛かりとなるでしょう。
http://dobon.net/vb/dotnet/system/wmiwin32os.html

また、下記のページなどでは、Win32_NetworkAdapterConfiguration から IP アドレスの
値を取得するという、そのものズバリな方法について書かれています。
残念ながら VB.NET では無く C#.NET なのですが、内容的には今回提示した私のサンプルと
同等なので見比べてみてください。ほぼ同じ処理である事がわかるかと思います。
http://dotnetfan.org/forums/thread/364.aspx


WMI は、VB.NET だけでなく、C# や VBScript ベースのサンプルも多いので、
VB.NET という言語だけには拘らずに、広く情報収集される事をお奨めします。

VBScript からの呼び出し(COM)と、.NET からの呼び出し(マネージコード)は
構文が異なるので、そのまま使う訳にいきませんが、「どの WMI クラスの、
どのプロパティ/メソッドを呼べばよいのか」を理解する助けにはなるはずです。

たとえば下記は、IP アドレスを「変更」(つまり、取得および設定)するという
VBScript によるサンプルです。
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/mar07/hey0301.mspx

WMI の「Win32_NetworkAdapterConfiguration クラス」を呼び出して、そこから
「IPAddress プロパティで取得」して、「EnableStatic メソッドで設定」している事が
読み取れるでしょうか。
■No22529に返信(魔界の仮面弁士さんの記事)
返信ありがとうございます。

なんとかかなりそうなのでやってみます。
また、わからないところがあったらよろしくお願いします。
■No22534に返信(さいてーやろーさんの記事)
> ■No22529に返信(魔界の仮面弁士さんの記事)
> 返信ありがとうございます。
>
> なんとかかなりそうなのでやってみます。
> また、わからないところがあったらよろしくお願いします。
>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板