Preguntando al usuario por un directorio en Windows 95/98

Los diálogos predeterminados de Windows 95/98 (common dialogs) son adecuados para seleccionar ficheros, pero ¿qué ocurre si se quiere seleccionar un directorio?. Lo que se debe hacer en este caso es utilizar la función SHBrowseForFolder de la API de Windows de 32 bits:

http://descarga.e-mision.net/FAQ20.Zip

Para realizar este proyecto necesitas una etiqueta “Label1” para presentar la selección del directorio.

Option Explicit
Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    Image As Long
End Type

Private Const BIF_RETURNONLYFSDIRS = 1
Private Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)

Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
             ByVal lpString2 As String) As Long

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

Public Function ObtenerDirectorio(hWndPadre As Long, sTitulo As String) As String
  Dim iNull As Integer
  Dim lpIDLista As Long
  Dim lResultado As Long
  Dim sDirectorio As String
  Dim udtBI As BrowseInfo

  With udtBI
      .hWndOwner = hWndPadre
      .lpszTitle = lstrcat(sTitulo, "")
      .ulFlags = BIF_RETURNONLYFSDIRS
  End With

  lpIDLista = SHBrowseForFolder(udtBI)
  If lpIDLista Then
     sDirectorio = String$(MAX_PATH, 0)
     lResultado = SHGetPathFromIDList (lpIDLista, sDirectorio)
     Call CoTaskMemFree(lpIDLista)
     iNull = InStr(sDirectorio, vbNullChar)

     If iNull Then
        sDirectorio = Left$(sDirectorio, iNull - 1)
     End If

  End If

  ObtenerDirectorio = sDirectorio
End Function
Private Sub Form_Load()
    Label1.Caption = ObtenerDirectorio(Me.hWnd, "Busca Directorio...")
End Sub
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s