Newsgroup: it.comp.lang.visual-basic
Titolo: API BrowseForFolder... errore!

Non si tratta proprio di un errore, forse è un limite, non lo so... Ho
impostato la funzione in modo che visualizzi le connessioni di rete, per
impostare il percorso di rete dove spostare dei file. Grazie a un aiuto
ricevuto qualche post fa ho trovato la costante che aggiunge alla finestra
di BrowseForFolder il pulsante "Nuova cartella", purtroppo però se vengono
visualizzate le unità di rete, questa impostazione manda in blocco tutto! Si
può fare qualche cosa per impedirlo e sfruttare questa proprietà?
Grazie...

può fare qualche cosa per impedirlo e sfruttare questa proprietà?
Dovrebbe funzionare, invece.
Quale codice usi e con quale sistema operativo?
Il blocco di verifica anche se fai il browsing della rete da esplora risorse?
-- 
ciao, hal

 ha scritto nel messaggio
news:a1vaqn$thl9u$1...@ID-56381.news.dfncis.de...

Da esplora risorse tutto ok! Il codice che uso è il seguente:
'\\ in un modulo
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const BIF_BROWSEFORCOMPUTER = &H1000
Private Const MAX_PATH = 260
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As
BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As
Long, ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal
lpString1 As String, ByVal lpString2 As String) As Long
Private Type BrowseInfo
    hwndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlagsAs Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
'\\ nel form
Private Sub Command1_Click()
    'Opens a Treeview control that displays
    'the directories in a computer
    Dim lpIDList As Long
    Dim sBuffer As String
    Dim szTitle As String
    Dim tBrowseInfo As BrowseInfo
    szTitle = "This is the title"
    With tBrowseInfo
        .hWndOwner = Me.hWnd
        .lpszTitle = lstrcat(szTitle, "")
        .ulFlags = BIF_RETURNONLYFSDIRS_
        +BIF_DONTGOBELOWDOMAIN
    End With
    lpIDList = SHBrowseForFolder(tBrowseInfo)
    If (lpIDList) Then
        sBuffer = Space(MAX_PATH)
        SHGetPathFromIDList lpIDList, sBuffer
        sBuffer = Left(sBuffer, InStr
        (sBuffer, vbNullChar) - 1)
        MsgBox sBuffer
    End If
End Sub
Questo è il codice da cui sono partito, poi ho aggiunto la costante per
aggiungere il pulsante negli <.ulFlags> e ho ristretto la visualizzazione
alla sola rete impostando <.pIDLRoot = CSIDL_NETWORK>.
A dire il vero, il blocco si genera con molte delle costanti che restringono
la visualizzazione tipo quella relativa alle stampanti, ecc. Se però tolgo
l'opzione per il pulsante "Nuova cartella" tutto funziona!
Dove sbaglio??? Grazie...

alla sola rete impostando <.pIDLRoot = CSIDL_NETWORK>.
Ehm, non ti ho chiesto da dove sei partito (quello e' l' esempio
di msdn sull' uso di SHBrowseForFolder), ma quello che _usi_.
-- 
ciao, hal


Scusa per l'imprecisione, solo che non ho modificato di molto il codice, te
lo riporto tutto:
...il codice si avvia premendo il pulsante "Sfoglia" in un form (stile
wizard) impostato "vbmodal"
Private Sub cmdSfogWiz1_Click(Index As Integer)
[...]
            '\\ visualizza treeview con risorse PC
            Dim lpIDList As Long
            Dim sBuffer As String
            Dim szTitle As String
            Dim tBrowseInfo As BrowseInfo
            szTitle = "Seleziona unità di rete"
            With tBrowseInfo
                .hwndOwner = Me.hwnd
                .ulFlags = BIF_RETURNONLYFSDIRS+USENEWUI
                .pIDLRoot = CSIDL_NETWORK
                .lpszTitle = lstrcat(szTitle, "")
            End With
            lpIDList = SHBrowseForFolder(tBrowseInfo)
            If (lpIDList) Then
                sBuffer = Space(MAX_PATH)
                SHGetPathFromIDList lpIDList, sBuffer
                sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
                txtPthArch(0) = sBuffer
                xPath = sBuffer & "\GSSdati.mdb"
            End If
... e nel modulo
Public Const BIF_RETURNONLYFSDIRS = 1
Public Const BIF_DONTGOBELOWDOMAIN = 2
Public Const BIF_BROWSEFORCOMPUTER = &H1000
Public Const BIF_USENEWUI = &H40
Public Const CSIDL_NETWORK = &H12
Public Const MAX_PATH = 260
Public Declare Function SHBrowseForFolder Lib "shell32" _
    (lpbi As BrowseInfo) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" _
    (ByVal pidList As Long, _
    ByVal lpBuffer As String) As Long
Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" _
    (ByVal lpString1 As String, ByVal _
    lpString2 As String) As Long
Public 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
E' possibile che la funzione entri in conflitto con altre api in esecuzione?
Grazie ancora per la correzione!

 Grazie ancora per la correzione!
Non so che dire: il tuo codice da me funziona :-(
(provato su un portatile Dell con win2k sp2 eng, vs6 sp5 eng)
-- 
ciao, hal
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 (provato su un portatile Dell con win2k sp2 eng, vs6 sp5 eng)
Bo! sarà XP allora... su un portatile Acer, XP+patch, vb6 sp5 ita non va...
sigh :(