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