Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: NYlOn en 26 Diciembre 2005, 19:31 pm



Título: CommonDialog
Publicado por: NYlOn en 26 Diciembre 2005, 19:31 pm
Hola a todos, mi pregunta es la siguiente.
Hay alguna forma de que, mediante APIs, pueda utilizar el dialogo que aparece en la foto??

(http://img401.imageshack.us/img401/8520/tkv6ys.jpg) (http://imageshack.us)

Lo necesito para seleccionar un directorio desde mi aplicacion.

Ya se que se puede crear un Form con listas de discos y carpetas, pero me gustaria hacerlo con APIs.

Gracias de antemano.

Un saludo y felices fiestas.-


Título: Re: CommonDialog
Publicado por: wuepe en 30 Diciembre 2005, 09:37 am
Crea un Form1 y pon un boton llamado Command1

Este es el codido:

Código:
Option Explicit

Private Type BROWSEINFO
     hOwner As Long
     pidlRoot As Long
     pszDisplayName As String
     lpszTitle As String
     ulFlags As Long
     lpfn As Long
     lParam As Long
     iImage As Long
End Type

Const BIF_RETURNONLYFSDIRS = &H1

Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long


Function CambioDestino(ByVal hWnd As Long, ByVal Titulo As String) As String
Dim Destino As String
Dim Dialog As BROWSEINFO
Dim Result As Long, Path As String, Longitud As Long
Destino = ""

Dialog.hOwner = hWnd
Dialog.lpszTitle = Titulo
Dialog.ulFlags = BIF_RETURNONLYFSDIRS
Result = SHBrowseForFolder(Dialog)

Path = Space(512)
Result = SHGetPathFromIDList(ByVal Result, ByVal Path)

'Resolvemos la ruta...
Longitud = InStr(Path, Chr$(0))
Destino = Left$(Path, Longitud - 1)
'Aseguramos la barra '\' tanto por unidad C:\ que por
'subdirectorios C:\Ruta\
If Right$(Destino, 1) <> "\" And Len(Destino) > 2 Then ' len(Destino)>2 es C:\
   Destino = Destino + "\"
End If
If Destino = "" Then Destino = "Cancelar..." 'Si cancela o pulsa la aspa 'X'
CambioDestino = Destino

End Function



Private Sub Command1_Click()
  Dim Destino As String
  Destino = CambioDestino(Me.hWnd, "Seleccione el directorio...")
  If Destino <> "Cancelar..." Then MsgBox Destino
End Sub


Saludos