ネットワーク上にフォルダを作成          <TOP>


SHBrowseForFolder 「フォルダの参照」ダイアログを開く
SHGetPathFromIDList アイテムIDリストをファイルシステムのパス名に変換
lstrcat ある文字列の末尾に別の文字列を結合
 

エディットボックスにフォルダ名を入れ、「フォルダの参照」を開き、作成する親フォルダを指定します。

  

 

'================================================================
'= ネットワーク上にフォルダを作成
'=    (SHBrowseForFolder3.bas)
'================================================================
#include "Windows.bi"
#include "File.bi"

Type BROWSEINFO
    hWndOwner       As Long
    pIDLRoot        As Long
    pszDisplayName  As Long
    lpszTitle       As Long
    ulFlags         As Long
    lpfnCallback    As Long
    lParam          As Long
    iImage          As Long
End Type

' 「フォルダの参照」ダイアログを開く
Declare Function Api_SHBrowseForFolder& Lib "shell32" Alias "SHBrowseForFolder" (lpbi As BROWSEINFO)

' アイテムIDリストをファイルシステムのパス名に変換
Declare Function Api_SHGetPathFromIDList& Lib "shell32" Alias "SHGetPathFromIDList" (ByVal pidList&, ByVal lpBuffer$)

' ある文字列の末尾に別の文字列を結合
Declare Function Api_lstrcat& Lib "Kernel32" Alias "lstrcatA" (ByVal lpString1$, ByVal lpString2$)

#define BIF_RETURNONLYFSDIRS &H1        'ファイルシステムディレクトリのみを返す
#define CSIDL_NETWORK &H12              'ネットワークコンピュータ(仮想フォルダ)
#define MAX_PATH 260                    '

Var Shared Edit1 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var pidList As Long
    Var Buffer As String
    Var bi As BROWSEINFO
    Var NetPath As String
    Var NewFolder As String
    Var Ret As Long
    
    bi.hWndOwner = GethWnd
    bi.pIDLRoot = CSIDL_NETWORK
    bi.ulFlags = BIF_RETURNONLYFSDIRS
    bi.lpszTitle = Api_lstrcat("ネットワークの参照", "")

    pidList = Api_SHBrowseForFolder(bi)
    If pidList Then
        Buffer = Space$(MAX_PATH)
        Ret = Api_SHGetPathFromIDList(pidList, Buffer)
        If Ret Then
            NetPath = Left$(Buffer, InStr(Buffer, Chr$(0)) - 1)
            Text1.SetWindowText NetPath
        Else
            Text1.SetWindowText "パス取得に失敗しました。"
            Exit Sub
        End If
    Else
        Text1.SetWindowText "失敗しました"
        Exit Sub
    End If
    
    '作成するフォルダ名
    NewFolder = NetPath & "\" & Edit1.GetWindowText
    
    'フォルダを作成
    MkDir NewFolder
    Text1.SetWindowText NewFolder & "を作成しました。"
End Sub

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