Re[2]: ネットワークコンピュータの中のあるファイルの選択


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by Uz on 2001/03/01 21:19:19

In Reply to: Re: ネットワークコンピュータの中のあるファイルの選択 Posted by saito on 2001/03/01 19:01:51


    > 実際はドライブリストなどにローカルドライブと
    > ネットワークコンピュータを表示してそのなかの、
    > あるコンピュータをダブルクリック、そのなかの
    > ファイルを表示して、ファイルを選択し、コマンドボタン
    > を押すとフルパスが取得できるような仕組みを
    > 作りたいのです。

    ん〜ん、ドライブリストでってことは、ネットワーク割り当てを
    したドライブの \\MyServer\Shared\ みたいなのを取得したいって
    こと?

    「Windows Scripting Runtime」を使っていいなら、
    参照設定についかして、以下のコードで、共有名が
    とれるよ。


    Sub ShowDriveList()
    Dim fs As Scripting.FileSystemObject
    Dim d As Scripting.Drive
    Dim dc As Scripting.Drives
    Dim s As String
    Dim n As String

    On Error Resume Next

    Set fs = New Scripting.FileSystemObject
    Set dc = fs.Drives

    For Each d In dc
    s = s & d.DriveLetter & " - "
    If d.DriveType = 3 Then
    n = d.ShareName
    Else
    n = d.VolumeName
    End If
    s = s & n & vbCrLf
    Next
    MsgBox s
    End Sub


    まぁ、「Windows Scripting Runtime」を使っていいっていうケースは
    あまり無いけどね。

    APIで行く場合は、以下のコードで
    (ん〜ん、これはいずれVBのページに追加しようっと。)

    Option Explicit

    Private Declare Function WNetGetUniversalName Lib "mpr" Alias "WNetGetUniversalNameA" ( _
    ByVal lpLocalPath As String, _
    ByVal dwInfoLevel As Long, _
    lpBuffer As Any, _
    lpBufferSize As Long _
    ) As Long

    Private Type UNIVERSAL_NAME_INFO
    lpUniversalName As String * 1024
    End Type

    Public Function GetUniversalName(sFilePath As String) As String
    Dim sBuf As UNIVERSAL_NAME_INFO
    Dim nSize As Long
    Dim I As Long
    Dim sName As String

    GetUniversalName = ""

    Call WNetGetUniversalName(sFilePath, 1, 0, nSize)
    Call WNetGetUniversalName(sFilePath, 1, sBuf, nSize)

    sName = sBuf.lpUniversalName
    sName = Mid$(sName, InStr(sName, Chr(0)) + 1)
    sName = Left$(sName, InStr(sName, Chr(0)) - 1)

    GetUniversalName = sName
    End Function


    こんな感じかな?
    saitoさんのしたいことって。


記事スレッド一覧