ネットワークに接続されている全てのコンピュータ名を取得
- 題名: ネットワークに接続されている全てのコンピュータ名を取得
- 著者: オーデ
- 日時: 2007/01/26 2:59:33
- ID: 18932
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: 遅くなってすみません。
- 著者: オーデ
- 日時: 2007/02/03 3:18:00
- ID: 19006
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: じゃんぬさんすみません。
- 著者: オーデ
- 日時: 2007/02/04 23:44:28
- ID: 19015
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: 解決しました!!
- 著者: オーデ
- 日時: 2007/02/07 12:07:38
- ID: 19039
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[7]: 解決しました!!
- 著者: オーデ
- 日時: 2007/02/07 12:08:41
- ID: 19040
- この記事の返信元:
-
[19039] 解決しました!! オーデ 2007/02/07 12:07:38
- この記事への返信:
- ツリーを表示
分類:[.NET]
お世話になります。
早速ですが、VB.NETで、ネットワークに接続されている全てのコンピュータ名
を取得しようとし、調べてきました。
APIを使いできるとあり、VB6でのサンプルをみつけたのでためしたのですが、
ループ内にはいっていきません。
どうかご教授お願いします。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim nr As wNET.NETRESOURCE
Dim lpnr As wNET.LPNETRESOURCE
Dim bnr(1000) As Byte
Dim strRemoteName As String
Dim hEnum As Integer
Dim BufSize As Integer
Dim ret As Integer
strRemoteName = CStr(512)
' NETRESOURCE構造体を設定
nr.dwScope = wNET.RESOURCE_GLOBALNET
nr.dwType = wNET.RESOURCETYPE_ANY
nr.dwDisplayType = wNET.RESOURCEDISPLAYTYPE_DOMAIN
nr.dwUsage = wNET.RESOURCEUSAGE_CONTAINER
nr.lpRemoteName = "WORKGROUP"
nr.lpProvider = "Microsoft Windows Network"
' 設定された NETRESOURCE でオープン
ret = wNET.WNetOpenEnum(wNET.RESOURCE_GLOBALNET, wNET.RESOURCETYPE_ANY, 0, nr, hEnum)
BufSize = 1000
' WNetEnumResource で接続されているコンピュータの情報を取得
Do While aa.WNetEnumResource(hEnum, 1, bnr(0), BufSize) = wNET.NO_ERROR
'取得したデータを strRemoteName にコピー
wNET.MoveMemory(lpnr, bnr(0), Len(lpnr))
wNET.lstrcpy(strRemoteName, lpnr.lpRemoteName)
'strRemoteName の後ろの Chr$(0) をカット
MessageBox.Show(strRemoteName)
'Debug.Print(Left$(strRemoteName, InStr(strRemoteName, vbNullChar) - 1))
Loop
wNET.WNetCloseEnum(hEnum)
End Sub
Public Class wNET
Structure NETRESOURCE
Public dwScope As Integer
Public dwType As Integer
Public dwDisplayType As Integer
Public dwUsage As Integer
Public lpLocalName As String
Public lpRemoteName As String
Public lpComment As String
Public lpProvider As String
End Structure
Structure LPNETRESOURCE
Public dwScope As Integer
Public dwType As Integer
Public dwDisplayType As Integer
Public dwUsage As Integer
Public lpLocalName As Integer
Public lpRemoteName As Integer
Public lpComment As Integer
Public lpProvider As Integer
End Structure
'================================================
'dwScope // リソースの範囲
'列挙するリソースの範囲を指定します。次の値のいずれかを指定します
'================================================
'現在接続されているすべてのリソース(dwUsage パラメータ
'は無視されます)
Public Const RESOURCE_CONNECTED = &H1
'呼び出し側のネットワークコンテキスト内([ネットワーク
'コンピュータ]に表示される範囲)のリソース(dwUsage
'パラメータは無視されます)
Public Const RESOURCE_CONTEXT = &H5
'ネットワーク上のすべてのリソース
Public Const RESOURCE_GLOBALNET = &H2
'記憶されている接続(dwUsage パラメータは無視されます)
Public Const RESOURCE_REMEMBERED = &H3
'================================================
'dwType // リソースの種類
'列挙するリソースの種類を指定します。次の値を組み合わせて指定します
'================================================
'すべてのリソース(RESOURCETYPE_DISK または RESOURCETYPE_PRINT
'との組み合わせは不可)
Public Const RESOURCETYPE_ANY = &H0
'すべてのディスクリソース
Public Const RESOURCETYPE_DISK = &H1
'すべての印刷リソース
Public Const RESOURCETYPE_PRINT = &H2
'================================================
'dwUsage // リソースの用途
'列挙するリソースの用途を指定します。次の値を組み合わせて指定します。
'================================================
'0 すべてのリソース
' すべての接続可能なリソース
Public Const RESOURCEUSAGE_CONNECTABLE = &H1
' すべてのコンテナリソース
Public Const RESOURCEUSAGE_CONTAINER = &H2
'================================================
'dwDisplayType // 表示タイプ
'エクスプローラなどで表示されるオブジェクトのタイプ
'================================================
'一般
Public Const RESOURCEDISPLAYTYPE_GENERIC = &H0
'ドメイン
Public Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
'サーバ
Public Const RESOURCEDISPLAYTYPE_SERVER = &H2
'共有
Public Const RESOURCEDISPLAYTYPE_SHARE = &H3
'================================================
'WNetOpenEnum 戻り値
'================================================
'lpNetResource パラメータがコンテナリソースを指していません。
Public Const ERROR_NOT_CONTAINER = 1207&
'dwScope パラメータまたは dwType パラメータの値が無効です。
Public Const ERROR_INVALID_PARAMETER = 87 ' dderror
'ネットワークがありません。
Public Const ERROR_NO_NETWORK = 1222&
'ネットワーク固有のエラーが発生しました。エラーの詳細は、
'WNetGetLastError 関数で取得できます。
Public Const ERROR_EXTENDED_ERROR = 1208&
'================================================
'WNetEnumResource 戻り値
'================================================
'列挙が成功し、要求したデータがバッファに格納されました。
'アプリケーションは、引き続きこの関数を呼び出して、列挙
'を続けることができます。
Public Const NO_ERROR = 0
'これ以上列挙するエントリはありません。このときのバッファ
'の内容は、未定義です。
Public Const ERROR_NO_MORE_ITEMS = 259&
'================================================
'まだ列挙できるエントリが残っています。
Public Const ERROR_MORE_DATA = 234
'hEnum ハンドルが無効です。
Public Const ERROR_INVALID_HANDLE = 6&
'ERROR_EXTENDED_ERROR、ERROR_NO_NETWORK も返されます。
'================================================
'Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" ( _
' ByVal dwScope As Integer, ByVal dwType As Integer, ByVal dwUsage As Integer, ByVal LPNETRESOURCE As Object, ByVal lphEnum As Integer) As Integer
Declare Auto Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" ( _
ByVal dwScope As Integer, ByVal dwType As Integer, ByVal dwUsage As Integer, ByVal LPNETRESOURCE As NETRESOURCE, _
ByVal lphEnum As Integer) As Long
Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" ( _
ByVal hEnum As Integer, ByVal lpcCount As Integer, ByRef lpBuffer As Byte, ByVal lpBufferSize As Integer) As Long
Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Integer) As Long
Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Object, ByVal Source As Integer, ByVal Length As Integer)
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
End Class