「フォルダの参照」->「ネットワークの参照」ダイアログを開く          <TOP>


「フォルダの参照」-「ネットワークの参照」ダイアログを開きます。ダイアログ゙内の選択したフォルダパスをEditBoxに表示させています。

lstrcat("C:\", "")とC:\を指定していますので、他のドライブを指定した場合はEditBoxに表示されません。

SHBrowseForFolder 「フォルダの参照」ダイアログを開く

SHGetPathFromIDList アイテムIDリストをファイルシステムのパス名に変換

lstrcat ある文字列の末尾に別の文字列を結合

 

 

'================================================================
'= 「フォルダの参照」-「ネットワークの参照」を開く
'=    (SHBrowseForFolder2.bas)
'================================================================
#include "Windows.bi"

Type BROWSEINFO
    hWndOwner      As Long              '表示されるダイアログボックスのオーナーウィンドウを指定
    pIDLRoot       As Long              'ルートフォルダを表すアイテムIDリストへのポインタを指定
    pszDisplayName As Long              'ユーザーに選択されたアイテムの表示名を格納するバッファのアドレスを指定    
    lpszTitle      As Long              'ダイアログボックスのツリービューコントロールの上部に表示される文字列のアドレスを指定
    ulFlags        As Long              'ダイアログボックスのオプションフラグを指定
    lpfnCallback   As Long
    lParam         As Long
    iImage         As Long
End Type

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

' 「フォルダの参照」ダイアログを開き、選択されたフォルダのID値を取得
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$)

Var Shared Edit1 As Object

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

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var lpIDList As Long
    Var Buffer As String
    Var NetPath As String
    Var bi As BROWSEINFO
    Var Ret As Long

    bi.hWndOwner = GethWnd
    bi.pIDLRoot = CSIDL_NETWORK
    bi.lpszTitle = Api_lstrcat("ネットワークの参照", "")
    bi.ulFlags = BIF_RETURNONLYFSDIRS

    lpIDList = Api_SHBrowseForFolder(bi)

    If lpIDList Then
        Buffer = Space$(MAX_PATH)
        Ret = Api_SHGetPathFromIDList(lpIDList, Buffer)

        If Ret Then
            NetPath = Left$(Buffer, InStr(Buffer, Chr$(0)) - 1)
        Else
            A% = MessageBox("", "パス取得失敗", 0, 2)
        End If
    End If

    Edit1.SetWindowText NetPath
End Sub

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