ネットワーク接続の名前を取得          <TOP>


GetDriveType ドライブのタイプを取得

WNetGetConnection ローカル装置に対応するネットワーク資源の名前を取得

 

 

'================================================================
'= ネットワーク接続の名前を取得
'=    (WNetGetConnection.bas)
'================================================================
#include "Windows.bi"

' ドライブのタイプを取得
Declare Function Api_GetDriveType& Lib "Kernel32" Alias "GetDriveTypeA" (ByVal nDrive$)

' ローカル装置に対応するネットワーク資源の名前を取得
Declare Function Api_WNetGetConnection& Lib "mpr" Alias "WNetGetConnectionA" (ByVal lpszLocalName$, ByVal lpszRemoteName$, cbRemoteName&)

#define DRIVE_CDROM 5                   'CD-ROMドライブ
#define DRIVE_FIXED 3                   '固定タイプ−主にハードディスク
#define DRIVE_NO_ROOT_DIR 1             'ルートディレクトリ無し
#define DRIVE_RAMDISK 6                 'RAMドライブ
#define DRIVE_REMOTE 4                  'ネットワーク
#define DRIVE_REMOVABLE 2               '取り外し可能タイプ−リムーバブルディスク
#define DRIVE_UNKNOWN 0                 'ドライブが不明

#define WN_NO_ERROR  0                  '関数成功
#define WN_BAD_DEVICE 1200              'lpLocalNameパラメータが指す文字列が無効
#define WN_CONNECTION_UNAVAILABLE 1201  '装置は現在接続されていないが、恒久的な接続として記憶されている
#define WN_EXTENDED_ERROR 1208          'ネットワーク固有のエラーが発生
#define WN_MORE_DATA 234                'バッファのサイズが不十分
#define WN_NOT_SUPPORTED 50             'サポート外
#define WN_NO_NET_OR_BAD_PATH 1203      '指定したローカル名を使った接続を認識するプロバイダがない
#define WN_NO_NETWORK 1222              'ネットワークに接続されていない
#define WN_NOT_CONNECTED 2250           'lpLocalNameパラメータで指定した装置がリダイレクトされていない

Var Shared Text1 As Object
Var Shared Combo1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Function GetUNCName(Drive As String) As String
Function GetUNCName(Drive As String) As String
    Var Buffer As String
    Var Leng As Long
    Var Msg As String
    Var Ret As Long

    Buffer = Space$(255)
    Leng = Len(Buffer)
    Ret = Api_WNetGetConnection(Drive, Buffer, Leng)

    Select Case Ret
        Case WN_BAD_DEVICE
            Msg = "パラメータが指す文字列が無効"
        Case WN_CONNECTION_UNAVAILABLE
            Msg = "装置は現在接続されていないが、恒久的な接続として記憶されている"
        Case WN_EXTENDED_ERROR
            Msg = "ネットワーク固有のエラーが発生"
        Case WN_MORE_DATA
            Msg = "バッファのサイズが不十分"
        Case WN_NOT_SUPPORTED
            Msg = "サポート外"
        Case WN_NO_NET_OR_BAD_PATH
            Msg = "指定したローカル名を使った接続を認識するプロバイダがない"
        Case WN_NO_NETWORK
            Msg = "ネットワークに接続されていない"
        Case WN_NOT_CONNECTED
            Msg = "lpLocalNameパラメータで指定した装置がリダイレクトされていない"
        Case Else
            Msg = ""
    End Select
  
    If Msg <> "" Then
        A% = MessageBox("", Msg, 0, 2)
    Else
        GetUNCName = Left$(Buffer, Leng)
    End If
End Function

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var i As Integer
    Var Drive As String * 2

    For i = 0 To 25
        Drive = Chr$(i + 65) & ":"
        Select Case Api_GetDriveType(Drive)
            Case DRIVE_REMOTE
                Combo1.AddString Drive
            Case Else
        End Select
    Next i
End Sub

'================================================================
'=
'================================================================
Declare Sub Combo1_Change edecl ()
Sub Combo1_Change()
  Text1.SetWindowText GetUNCName(Combo1.GetWindowText)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End