文書番号: 177697 - 最終更新日: 2005年10月25日 - リビジョン: 3.3

WNetEnumResource を使用してローカル ネットワーク接続の一覧を得る方法

すべて展開する | すべて折りたたむ

概要

WNetOpenEnum と WNetEnumResource を使用すると、Windows 2000、Windows NT、Windows Me、Windows 98、または Windows 95 を実行しているコンピュータ上で、ローカル ドライブ、リダイレクトされたプリンタ ポート、および UNC 接続の一覧を得ることができます。

この後に示すコードは、dwType パラメータに RESOURCETYPE_ANY を設定して最初に WNetOpenEnum を呼び出すことで、Visual Basic からこれを行う方法を示したものです。最後のパラメータを経由して返される有効なハンドルが WNetEnumResource に渡されます。この関数によって NETRESOURCE 構造体の配列が一時バッファに格納されます。NETRESOURCE 構造体には、ローカル ネットワーク接続に関する情報が含まれています。

この機能では、リモート コンピュータ上のリダイレクトされたリソースの一覧は取得できません。この機能を持つオペレーティング システムはありません。

詳細

このサンプルには、フォームとモジュールがそれぞれ 1 つずつ含まれています。サンプルを作成するには、次の手順を実行します。
  1. 新しいプロジェクトを作成し、次のコードをフォームに追加します。
          Option Explicit
    
          Private Const GMEM_FIXED = &H0
          Private Const GMEM_ZEROINIT = &H40
          Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)
    
          Private Declare Function GlobalAlloc Lib "KERNEL32" ( _
             ByVal wFlags As Long, ByVal dwBytes As Long) As Long
          Private Declare Function GlobalFree Lib "KERNEL32" ( _
             ByVal hMem As Long) As Long
    
          Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
            (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    
          Private Declare Function CopyPointer2String Lib "KERNEL32" _
             Alias "lstrcpyA" ( _
             ByVal NewString As String, ByVal OldString As Long) As Long
    
          Private Sub Form_click()
             Dim hEnum As Long, lpBuff As Long, nr As NETRESOURCE
             Dim cbBuff As Long, cCount As Long
             Dim p As Long, res As Long, i As Long
    
             'Setup the NETRESOURCE input structure.
             nr.dwUsage = RESOURCEUSAGE_CONTAINER
             nr.lpRemoteName = 0
             cbBuff = 1000
             cCount = &HFFFFFFFF
    
             'Open a Net enumeration operation handle: hEnum.
             res = WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, _
                                0, nr, hEnum)
             If res = 0 Then
                'Create a buffer large enough for the results.
                '1000 bytes should be sufficient.
                lpBuff = GlobalAlloc(GPTR, cbBuff)
                'Call the enumeration function.
                res = WNetEnumResource(hEnum, cCount, lpBuff, cbBuff)
                If res = 0 Then
                   p = lpBuff
                   Cls
                   'WNetEnumResource fills the buffer with an array of
                   'NETRESOURCE structures. Walk through the list and print
                   'each local and remote name.
                   For i = 1 To cCount
                      CopyMemory nr, ByVal p, LenB(nr)
                      p = p + LenB(nr)
                      Print PointerToString(nr.lpLocalName), _
                            PointerToString(nr.lpRemoteName)
                   Next i
                Else
                   MsgBox "Error: " & Err.LastDllError, vbOKOnly, _
                          "WNetEnumResources"
                End If
                If lpBuff <> 0 Then GlobalFree (lpBuff)
                WNetCloseEnum (hEnum) 'Close the enumeration
             Else
                MsgBox "Error: " & Err.LastDllError, vbOKOnly, "WNetOpenEnum"
             End If
          End Sub
    
          Private Function PointerToString(p As Long) As String
             'The values returned in the NETRESOURCE structures are pointers to
             'ANSI strings so they need to be converted to Visual Basic
       Strings.
             Dim s As String
             s = String(255, Chr$(0))
             CopyPointer2String s, p
             PointerToString = Left(s, InStr(s, Chr$(0)) - 1)
          End Function
    
    					
  2. 新しいモジュールをプロジェクトに追加し、次のコードを追加します。
          Option Explicit
    
          Public Type NETRESOURCE
                  dwScope As Long
                  dwType As Long
                  dwDisplayType As Long
                  dwUsage As Long
                  lpLocalName As Long
                  lpRemoteName As Long
                  lpComment As Long
                  lpProvider As Long
          End Type
    
          Public Declare Function WNetOpenEnum Lib "mpr.dll" Alias _
              "WNetOpenEnumA" ( _
              ByVal dwScope As Long, _
              ByVal dwType As Long, _
              ByVal dwUsage As Long, _
              lpNetResource As Any, _
              lphEnum As Long) As Long
    
          Public Declare Function WNetEnumResource Lib "mpr.dll" Alias _
              "WNetEnumResourceA" ( _
              ByVal hEnum As Long, _
              lpcCount As Long, _
              ByVal lpBuffer As Long, _
              lpBufferSize As Long) As Long
    
          Public Declare Function WNetCloseEnum Lib "mpr.dll" ( _
              ByVal hEnum As Long) As Long
    
          'RESOURCE ENUMERATION.
          Public Const RESOURCE_CONNECTED = &H1
          Public Const RESOURCE_GLOBALNET = &H2
          Public Const RESOURCE_REMEMBERED = &H3
    
          Public Const RESOURCETYPE_ANY = &H0
          Public Const RESOURCETYPE_DISK = &H1
          Public Const RESOURCETYPE_PRINT = &H2
          Public Const RESOURCETYPE_UNKNOWN = &HFFFF
    
          Public Const RESOURCEUSAGE_CONNECTABLE = &H1
          Public Const RESOURCEUSAGE_CONTAINER = &H2
          Public Const RESOURCEUSAGE_RESERVED = &H80000000
    
    					
  3. プログラムを実行します。フォームをクリックすると、すべてのローカル ネットワーク接続の一覧が、接続されている共有と一緒に表示されます。

この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Windows NT 3.51 Service Pack 5
  • Microsoft Windows NT 4.0
  • Microsoft Windows 95
  • Microsoft Platform SDK January 2000 Edition
  • Microsoft Windows 2000 Standard Edition
  • Microsoft Windows Millennium Edition
キーワード:?
kbhowto kbwnet KB177697
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
 

サポート技術情報の翻訳