powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / SHBrowseForFolder - начальная директория
4 сообщений из 4, страница 1 из 1
SHBrowseForFolder - начальная директория
    #33706535
vov@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне необходимо, чтоб диалог стартовал с папки "Мои документы"...
Путь к папке из реестра я вычитать могу.
Подскажите, пожалуйста, куда его в структуру BrowseInfo вставить?
...
Рейтинг: 0 / 0
SHBrowseForFolder - начальная директория
    #33707143
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
Public Type BROWSEINFO
    hwndOwner As Long
    pidlRoot As Long
    strDisplayName As String
    strTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    lImage As Long
End Type

Public Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" ( _
  ByVal hwndOwner As Long, _
  ByVal lngFolder As Long, _
  ByRef idl As Long) As Long

Public Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" ( _
  ByVal idl As Long, _
  ByVal Path As String) As Long

Public Declare Function SHBrowseForFolder Lib "shell32.dll" _
  Alias "SHBrowseForFolderA" ( _
  bi As BROWSEINFO) As Long

Public Const CSIDL_DESKTOP As Long = &H0
Public Const CSIDL_INTERNET As Long = &H1
Public Const CSIDL_PROGRAMS As Long = &H2
Public Const CSIDL_CONTROLS As Long = &H3
Public Const CSIDL_PRINTERS As Long = &H4
Public Const CSIDL_PERSONAL As Long = &H5
Public Const CSIDL_FAVORITES As Long = &H6
Public Const CSIDL_STARTUP As Long = &H7
Public Const CSIDL_RECENT As Long = &H8
Public Const CSIDL_SENDTO As Long = &H9
Public Const CSIDL_BITBUCKET As Long = &HA
Public Const CSIDL_STARTMENU As Long = &HB
Public Const CSIDL_DESKTOPDIRECTORY As Long = &H10
Public Const CSIDL_DRIVES As Long = &H11
Public Const CSIDL_NETWORK As Long = &H12
Public Const CSIDL_NETHOOD As Long = &H13
Public Const CSIDL_FONTS As Long = &H14
Public Const CSIDL_TEMPLATES As Long = &H15

Public Const BIF_RETURNALL As Long = &H0
Public Const BIF_RETURNONLYFSDIRS As Long = &H1

Public Const cMaxPath =  260 
Public Const cNoError =  0 &
Public Const cErrorExtendedError =  1208 &

Public Function fnBrowseForFolder(ByVal lngCSIDL As Long, _
  ByVal lngBifFlags As Long, _
  strFolder As String, _
  Optional ByVal hWnd As Long =  0 , _
  Optional strTitle As String = "Select Directory") As Long

    Dim usrBrws As BROWSEINFO
    Dim lngReturn As Long
    Dim lngIDL As Long
    
    If SHGetSpecialFolderLocation(hWnd, lngCSIDL, lngIDL) =  0  _
      Then
        
        With usrBrws
            .hwndOwner = hWnd
            .pidlRoot = lngIDL
            .strDisplayName = String$(cMaxPath, vbNullChar)
            .strTitle = strTitle
            .ulFlags = lngBifFlags
        End With
        
        lngIDL = SHBrowseForFolder(usrBrws)
        
        If lngIDL Then
            strFolder = String$(cMaxPath, vbNullChar)
            
            If SHGetPathFromIDList(lngIDL, strFolder) Then
                strFolder = fnTrimNull(strFolder)
                lngReturn = cNoError
            Else
                strFolder = fnTrimNull(usrBrws.strDisplayName)
                lngReturn = cNoError
            End If
        Else
            lngReturn = cErrorExtendedError
        End If
    Else
        lngReturn = cErrorExtendedError
    End If
    
    fnBrowseForFolder = lngReturn
End Function

Function fnTrimNull( _
  ByVal strValue As String) As String
    Dim intPos As Integer
    
    intPos = InStr(strValue, vbNullChar)
    
    Select Case intPos
        Case  0 
        Case  1 
            fnTrimNull = ""
        Case Is >  1 
            fnTrimNull = Left$(strValue, intPos -  1 )
        End Select
End Function

Вызываешь так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public Sub Test()
    Dim strFolder As String
    
    fnBrowseForFolder CSIDL_PERSONAL, _
      BIF_RETURNONLYFSDIRS, strFolder
    
    MsgBox strFolder
End Sub
...
Рейтинг: 0 / 0
SHBrowseForFolder - начальная директория
    #33707673
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashton, CoTaskMemFree lngIDL лучше бы делать.
...
Рейтинг: 0 / 0
SHBrowseForFolder - начальная директория
    #33708783
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно, можно и так.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / SHBrowseForFolder - начальная директория
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]