• ベストアンサー

LAN内に設置されているコンピュータ名を

LAN内に設置されているコンピュータ名を VB2005で作成したアプリ内で表示する必要があります。 コマンドプロンプトの [NET VIEW]コマンドと同等の処理を行うとすれば どのようにコーディングしていけば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

昔、VBScriptでやってたヤツを編集し直してみました。 '**** ネットワークに接続しているマシン名を取得 **** Function GetNodes() As List(Of String)     Const ssfNETWORK As Integer = &H12     Dim A, B, C     Dim R As List(Of String) = New List(Of String)     GetNodes = R     C = GetMyWorkGroup()     A = CreateObject("Shell.Application")     A = FindFolder("ネットワーク全体", A.Namespace(ssfNETWORK))     If A Is Nothing Then Exit Function     A = FindFolder("Microsoft Windows Network", A.GetFolder())     If A Is Nothing Then Exit Function     '★もし、ワークグループに関わらず取得する場合は以下を工夫する     A = FindFolder(C, A.GetFolder())     If A Is Nothing Then Exit Sub     A = A.GetFolder().Items()     For Each B In A         R.Add(B.Name)     Next     GetNodes = R End Function '**** フォルダ集団から指定の名前を持つオブジェクトを返す *** Function FindFolder(ByVal Name, ByVal Folder)     Dim A     FindFolder = Nothing     Name = Name.ToUpper()     For Each A In Folder.Items()         If A.Name.ToUpper = Name Then             FindFolder = A             Exit For         End If     Next End Function '**** 自身のワークグループを取得 **** Function GetMyWorkGroup() As String     Dim A, B     GetMyWorkGroup = ""     A = CreateObject("WbemScripting.SWbemLocator")     A = A.ConnectServer()     A = A.ExecQuery("SELECT Domain FROM Win32_ComputerSystem")     For Each B In A         GetMyWorkGroup = B.Domain     Next End Function

darlinr
質問者

お礼

なんと!サンプルまで頂きまして、ありがとうございます! 頂いたサンプルに少しコードを足して、 望み通りの結果が得れました! ありがとうございました!

darlinr
質問者

補足

VB2005で新規プロジェクトを作成して、フォームにボタンとリストボックスを貼り付けて・・・ Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sList As List(Of String) Dim i As Integer = 0 sList = GetNodes() ListBox1.Items.Clear() For i = 0 To sList.Count - 1 ListBox1.Items.Add(sList(i)) Next End Sub '**** ネットワークに接続しているマシン名を取得 **** Function GetNodes() As List(Of String) Const ssfNETWORK As Integer = &H12 Dim A, B, C Dim R As List(Of String) = New List(Of String) GetNodes = R C = GetMyWorkGroup() A = CreateObject("Shell.Application") A = FindFolder("ネットワーク全体", A.Namespace(ssfNETWORK)) If A Is Nothing Then Exit Function A = FindFolder("Microsoft Windows Network", A.GetFolder()) If A Is Nothing Then Exit Function '★もし、ワークグループに関わらず取得する場合は以下を工夫する A = FindFolder(C, A.GetFolder()) If A Is Nothing Then Exit Function A = A.GetFolder().Items() For Each B In A R.Add(B.Name) Next GetNodes = R End Function '**** フォルダ集団から指定の名前を持つオブジェクトを返す *** Function FindFolder(ByVal Name, ByVal Folder) Dim A FindFolder = Nothing Name = Name.ToUpper() For Each A In Folder.Items() If A.Name.ToUpper = Name Then FindFolder = A Exit For End If Next End Function '**** 自身のワークグループを取得 **** Function GetMyWorkGroup() As String Dim A, B GetMyWorkGroup = "" A = CreateObject("WbemScripting.SWbemLocator") A = A.ConnectServer() A = A.ExecQuery("SELECT Domain FROM Win32_ComputerSystem") For Each B In A GetMyWorkGroup = B.Domain Next End Function End Class

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

NET VIEWをcmd.exeで実行して結果を%TEMP%に書き出す。

darlinr
質問者

お礼

質問を書きながら、仰るとおりの事で問題ない気がしてました。 しかしながら、もう少し便利なロジックがあるかもと期待して質問して見ました。 ありがとうございました!

関連するQ&A