Newsgroup: it.comp.lang.visual-basic
Titolo: Dll per effettuare il FileBrowse del Pc

Esiste una dll per effettuare il file browse, cioè che permetta di
aprire le risorse del pc per poter effettuare la selezione di un file
e che restituisca il path (compreso del nome di file selezionato)
come
risultati della funzione ?
Io lavoro in un ambiente di sviluppo in cui posso fare solo una
dichiarazione ad un API 32bit di Windows, es.  ShellExecuteA
Cercavo appunto una normale API Windows da invocare
Ciao
Maurizio

 Cercavo appunto una normale API Windows da invocare
questa va bene?
http://msdn.microsoft.com/en-us/library/aa364963%28v=vs.85%29.aspx
ciao
stefano

 
http://msdn.microsoft.com/en-us/library/aa364963%28v=vs.85%29.aspx
Se ho interpretato bene la domanda, credo cercasse questa:
http://msdn.microsoft.com/en-us/library/ms646927(v=vs.85).aspx
-- 
Stevie


Mi sa che hai ragione tu :-)
ciao
stefano

Ciao Stefano,
purtroppo credo non vada bene.
Io avrei bisogno di poter effettuare una chiamata tipo il comando
"control printers" (che si può lanciare anche direttamente da Start->
Esegui), che dovrebbe aprire le risorse del computer, permettere
quindi all'utente di sfogliare le cartelle e selezionare un file.
Successivamente poter leggere il path completo del file .
Sincerimente non so neanche come si possa fare e se si possa..Dal mio
ambiente di sviluppo posso fare dichiarazione API molto semplici tipo
la ShellExecute
Grazie comunque per l'aiuto
Maurizio

La GetOpenFileName andrebbe bene.
Mi pare di capire che visualizzi la finestra per effettuare il browse
del pc e selezionare un file.
Solo che avrei bisogno che la funzione restituisse il path come
risultato della funzione (non ho la possibilità di leggere alcun tipo
di puntatore)
In sostanza per poterla utilizzare avrei bisogno di una funzione del
tipo :
declare GetOpenFileName ( parametri)  as string
dove in string dovrei avere il path del file scelto.. mi rendo conto
che forse non è possibile
Grazie comunque
Maurizio

 che forse non � possibile
Ho paura di no :/
Le API di WIN32 (almeno quelle il cui risultato � una stringa) 
normalmente accettano un buffer dove poi scrivono il risultato.
Ma hey, potrei benissimo sbagliarmi.
-- 
Stevie

Guarda se ti può aiutare
API
SHBrowseForFolder
http://allapi.mentalis.org/apilist/SHBrowseForFolder.shtml
esempio vb6
http://allapi.mentalis.org/apilist/774F8232380EA83E4CF374E8F31ED355.html
altrimenti sul "vecchio" sito comune
http://www.it-lang-vb.net/collab.asp?fornitore=119&Menu=Documentazione
c'è come usare le common dialog via API
dimmi se ti è servito....

 Maurizio
Con una sola funzione non ce la fai.
Ce ne vogliono una manciarta e qualche riga di codice che le faccia 
intergagire.
Metti tutto questo in un modulo:
[INIZIO]
Option Explicit
Private Type BROWSEINFO
   hWndOwner As Long
   pidlRoot As Long
   pszDisplayName As String
   lpszTitle As String
   ulFlags As Long
   lpfnCallback As Long
   lParam As Long
   iImage As Long
End Type
Public Const BIF_RETURNONLYFSDIRS = &H1
Public Const BIF_DONTGOBELOWDOMAIN = &H2
Public Const BIF_STATUSTEXT = &H4
Public Const BIF_RETURNFSANCESTORS = &H8
Public Const BIF_EDITBOX = &H10
Public Const BIF_VALIDATE = &H20
Public Const BIF_NEWDIALOGSTYLE = &H40
Public Const BIF_USENEWUI = (BIF_NEWDIALOGSTYLE Or BIF_EDITBOX)
Public Const BIF_BROWSEINCLUDEURLS = &H80
Public Const BIF_UAHINT = &H100
Public Const BIF_NONEWFOLDERBUTTON = &H200
Public Const BIF_NOTRANSLATETARGETS = &H400
Public Const BIF_BROWSEFORCOMPUTER = &H1000
Public Const BIF_BROWSEFORPRINTER = &H2000
Public Const BIF_BROWSEINCLUDEFILES = &H4000
Public Const BIF_SHAREABLE = &H8000
Private Const MAX_PATH = 260
Private Const WM_USER = &H400
Private Const BFFM_INITIALIZED = 1
Private Const BFFM_SELCHANGED = 2
Private Const BFFM_SETSTATUSTEXT = (WM_USER + 100)
Private Const BFFM_SETSELECTION = (WM_USER + 102)
Public Declare Function SHGetPathFromIDList Lib _
    "shell32.dll" Alias "SHGetPathFromIDListA" _
    (ByVal pidl As Long, ByVal pszPath As String) As Long
Public Declare Function SHBrowseForFolder Lib _
    "shell32.dll" Alias "SHBrowseForFolderA" _
    (lpBrowseInfo As BROWSEINFO) As Long
Public Declare Sub CoTaskMemFree Lib _
    "ole32.dll" (ByVal pv As Long)
Private Declare Function SendMessage Lib _
    "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As String) As Long
Private mstrSTARTFOLDER As String
Public Function GetFolder(ByVal hWndModal As Long, _
    Optional StartFolder As String = "", _
    Optional Title As String = "Seleziona la cartella:", _
    Optional IncludeFiles As Boolean = False, _
    Optional IncludeNewFolderButton As Boolean = False) As String
    Dim bInf As BROWSEINFO
    Dim RetVal As Long
    Dim PathID As Long
    Dim RetPath As String
    Dim Offset As Integer
    'Set the properties of the folder dialog
    bInf.hWndOwner = hWndModal
    bInf.pidlRoot = 0
    bInf.lpszTitle = Title
    bInf.ulFlags = BIF_RETURNONLYFSDIRS Or BIF_STATUSTEXT
    If IncludeFiles Then bInf.ulFlags = bInf.ulFlags Or 
BIF_BROWSEINCLUDEFILES
    If IncludeNewFolderButton Then bInf.ulFlags = bInf.ulFlags Or 
BIF_NEWDIALOGSTYLE
    If StartFolder <> "" Then
       mstrSTARTFOLDER = StartFolder & vbNullChar
       bInf.lpfnCallback = GetAddressofFunction _
            (AddressOf BrowseCallbackProc) 'get address of function.
   End If
    'Show the Browse For Folder dialog
    PathID = SHBrowseForFolder(bInf)
    RetPath = Space$(512)
    RetVal = SHGetPathFromIDList(ByVal PathID, ByVal RetPath)
    If RetVal Then
         Offset = InStr(RetPath, Chr$(0))
         GetFolder = Left$(RetPath, Offset - 1)
         CoTaskMemFree PathID
    Else
         GetFolder = ""
    End If
End Function
Private Function BrowseCallbackProc _
        (ByVal hWnd As Long, ByVal uMsg As Long, _
        ByVal lP As Long, ByVal pData As Long) As Long
   On Error Resume Next
   Dim lpIDList As Long
   Dim Ret As Long
   Dim sBuffer As String
   Select Case uMsg
       Case BFFM_INITIALIZED
           Call SendMessage(hWnd, BFFM_SETSELECTION, 1, mstrSTARTFOLDER)
       Case BFFM_SELCHANGED
           sBuffer = Space(MAX_PATH)
           Ret = SHGetPathFromIDList(lP, sBuffer)
           If Ret = 1 Then
               Call SendMessage(hWnd, BFFM_SETSTATUSTEXT, 0, sBuffer)
           End If
   End Select
   BrowseCallbackProc = 0
End Function
Private Function GetAddressofFunction(add As Long) As Long
 GetAddressofFunction = add
End Function
[FINE]
Alla fine tutto si riduce a questo. Crea un form e mettici un pulsante 
(che si deve chiamare Command1) con questo codice:
[INIZIO]
Private Sub Command1_Click()
    Dim nomeFILE As String, mSG As String
    Dim A() As String
    nomeFILE = GetFolder(Me.hWnd, _
                         "c:\windows", _
                         "Seleziona file e cartella", _
                         True, _
                         False)
    If nomeFILE = "" Then
        mSG = "il comando � stato annullato"
    Else
        A() = Split(nomeFILE, "\")
        mSG = "file: " & A(UBound(A())) & vbNewLine & _
              "path: " & Left(nomeFILE, Len(nomeFILE) - 
Len(A(UBound(A()))))
    End If
    MsgBox mSG, vbExclamation, "Ed ecco a voi La Renna Sacra"
End Sub
[FINE]
NB: attenzione alle andate a capo...
-- 
-> GbC|
www.chiappori.com
 


Ecco l'esempio VB6:
www.gbcdepot.com/_files/browsefolders.zip
7.7 k
-- 
-> GbC|
www.chiappori.com