IPアドレスを設定するには?


西川  2004-04-06 14:51:34  No: 82871  IP: [192.*.*.*]

VBでIPアドレスの取得とかは出来るのですが、
管理者権限ならIPアドレスを設定できるようなものってありませんか?
もしご存知なら教えて頂きたいです。

編集 削除
ねろ  2004-04-06 15:10:34  No: 82872  IP: [192.*.*.*]

Winsockコントロールを使う方法がいちばん簡単です。
Text1.Text = Winsock1.LocalIP
これだけです。

編集 削除
ねろ  2004-04-06 20:49:00  No: 82873  IP: [192.*.*.*]

よ読み間違った!
IPをVBで設定、わかりません、申し訳ない。(^^;
思いつきで言うと、DOSのarpコマンドをバッチファイルに仕込んで
そのバッチファイルをVBからShellでキックしたらどうでしょうか。

編集 削除
MASHER  2004-04-22 06:43:36  No: 82874  IP: [192.*.*.*]

お使いのOSがWMIをサポートしていれば、以下のURLが役に立つと思います。

http://www.kawabata.ksi.ne.jp/ips.asp

編集 削除
魔界の仮面弁士  2004-04-22 17:54:41  No: 82875  IP: [192.*.*.*]

Shell関数を使って、『netshコマンド』を発行してみるとか。
http://www.monyo.com/technical/windows/26.html
http://www.atmarkit.co.jp/fwin2k/win2ktips/126sw_netconf/126sw_netconf.html

編集 削除
ねろ  2004-04-23 09:38:23  No: 82876  IP: [192.*.*.*]

前のレスの時に一応出来てはいたのですが、なんとなく自信が無くて。(^^;
要するにレジストリーを書き換えると言うことですが、リブートは必要ですね。
ネットワークカードのサービス名を読み取りそれをキーにIPのレジストリーを
書き換えます。
'REG_MULTI_SZ'これが結構いやらしいのですが、IPの場合はこれでいけるようです。
レジストリーを書き換える時は慎重に、自己責任でどーぞ!!
一応Win2kで確認済み、98の場合は SubKeyの’Windows NT’->'Windows'でいけると
思いますが未確認。
質問者はとっくに見てないと思いますがまあ一応。

Option Explicit

Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const KEY_CREATE_LINK = &H20

Private Const KEY_ALL_ACCESS = KEY_QUERY_VALUE Or KEY_SET_VALUE Or _
    KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _
    KEY_NOTIFY Or KEY_CREATE_LINK

Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_SZ = 1
Private Const REG_MULTI_SZ = 7
Private Declare Function RegOpenKeyEx Lib _
    "ADVAPI32" Alias "RegOpenKeyExA" _
    (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, _
    ByVal samDesired&, phkhKeyHandle&) As Long

Private Declare Function RegQueryValueExstr Lib _
    "ADVAPI32" Alias "RegQueryValueExA" _
    (ByVal hKey&, ByVal lpValueName$, ByVal lpReserved&, _
    ByVal lpType&, ByVal lpData$, lpcbData&) As Long
 
Private Declare Function RegCloseKey Lib "ADVAPI32" _
    (ByVal hKey As Long) As Long
    
Private Declare Function RegSetValueEx Lib _
    "advapi32.dll" Alias "RegSetValueExA" _
    (ByVal hKey As Long, ByVal lpValueName As String, _
    ByVal Reserved As Long, ByVal dwType As Long, _
    lpData As Any, ByVal cbData As Long) As Long
Private Sub Command1_Click()
    Dim ServiceName As String
   
    Dim length As Long
    Dim Rootkey As Long
    Dim hKeyHandle As Long
    Dim SubKey As String
    Dim Ret As Long
    Dim ip As String
    Rootkey = HKEY_LOCAL_MACHINE
    
    'ネットワークカード1のサービス名の取得とりあえず一枚目のみ
    '2枚目は\2となる
    SubKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\1"
    
    'マシンがNT系で無い場合は下を使う
    'SubKey= "SOFTWARE\Microsoft\Windows\CurrentVersion\NetworkCards\1"
    
    Ret = RegOpenKeyEx(Rootkey, SubKey, 0, 1, hKeyHandle)
    ServiceName = String(250, Chr(0))
    length = Len(ServiceName)
    Ret = RegQueryValueExstr(hKeyHandle, "ServiceName", 0, 0, ServiceName, length)
    Call RegCloseKey(hKeyHandle)
    
    ServiceName = Left(ServiceName, length - 1)
    'IPの設定
    SubKey = "SYSTEM\CurrentControlSet\Services\" & ServiceName _
        & "\Parameters\Tcpip"
    
    
    Ret = RegOpenKeyEx(Rootkey, SubKey, 0, KEY_ALL_ACCESS, hKeyHandle)
    ip = Trim(Text1.Text) + Chr(0)
    Ret = RegSetValueEx(hKeyHandle, "IPAddress", 0, _
        REG_MULTI_SZ, ByVal ip, Len(ip) + 1)
    Call RegCloseKey(hKeyHandle)
End Sub

編集 削除