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