「フォルダの参照」-「C:\」ダイアログを開く          <TOP>


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

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

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

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

CoTaskMemFree アイテムIDリストの解放

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

 

 

 

'================================================================
'= 「フォルダの参照」ダイアログを開く
'=    (SHBrowseForFolder.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 BIF_RETURNONLYFSDIRS 1          'ファイルシステムディレクトリのみを返します
#define BIF_DONTGOBELOWDOMAIN 2         'ダイアログボックスのツリービューコントロールにドメインレベルのネットワークフォルダを含めない
#define BIF_STATUSTEXT 4                'ダイアログボックスにステータス領域を表示
#define BIF_RETURNFSANCESTORS 8         'シェルネームスペース階層構造の中でルートフォルダの下にあるファイルシステムサブフォルダのみを返す
#define BIF_EDITBOX 10                  'ユーザーがアイテム名を書き込むことができるエディットコントロールを表示

#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$)

' アイテムIDリストの解放
Declare Sub Api_CoTaskMemFree Lib "ole32" Alias "CoTaskMemFree" (ByVal hMem&)

' ある文字列の末尾に別の文字列を結合
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 iNull As Integer
    Var lpIDList As Long
    Var Ret As Long
    Var sPath As String
    Var bi As BROWSEINFO

    bi.hWndOwner = GwthWnd
    bi.lpszTitle = Api_lstrcat("C:\", "")    'ある文字列の末尾に別の文字列を結合
    bi.ulFlags = BIF_DONTGOBELOWDOMAIN

    lpIDList = Api_SHBrowseForFolder(bi)

    If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        Ret = Api_SHGetPathFromIDList(lpIDList, sPath)
        Api_CoTaskMemFree lpIDList
        iNull = InStr(sPath, Chr$(0))
        If iNull Then
            sPath = Left$(sPath, iNull - 1)
        End If
    End If

    Edit1.SetWindowText sPath
End Sub

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