Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: JBB en Agosto 05, 2015, 04:25:23 pm
-
Hace Muuuuuucho tiempo que vengo realizando un programa con LisView y solo me queda que resolver el tema de recuperar lo que eliminas y va a la papelera.
Me explico:
Es un explorador como el de windows de archivos y carpetas.
En el LV aparecen los archivos y al seleccionar algo y pulsar la tecla delete o suprimir o eliminar, lo mandas a la papelera.
El tema es que quiero pulsar Ctrl+z y que regrese a su origen.
Alguna idea???
GRACIAS MIL o mejor 1 MILLON
-
Yo creo que tenes que poner en otro Listview o dentro de una variable temporal por asi decirlo la ruta y el nombre del archivo y cuando pulzas dentro de tu programa la combinacion de control z que vuelva el archivo en su lugar original.
-
hola no tengo ni idea, pero que código empleas para enviar a la papelera quizás tenga alguna forma de revertir.
Saludos.
-
hola no tengo ni idea, pero que código empleas para enviar a la papelera quizás tenga alguna forma de revertir.
Saludos.
He utilizado el FSO pero funciona mejor esta función que pongo.
Esta es la función que utilizo:
'''''''Mueve Copia Elimina y lo manda a la papelera
Public Const FO_MOVE As Long = &H1
Public Const FO_COPY As Long = &H2
Public Const FO_DELETE = &H3
Public Const FOF_ALLOWUNDO = &H40
Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
End Type
Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
Gracias.
-
Yo creo que tenes que poner en otro Listview o dentro de una variable temporal por asi decirlo la ruta y el nombre del archivo y cuando pulzas dentro de tu programa la combinacion de control z que vuelva el archivo en su lugar original.
La idea que comentas se me escapa de mi entendimiento ya que la papelera es una ruta especial (por decirlo de alguna manera).
No es lo mismo que entres a la papelera con el icono de windows a que entres en C:\RECYCLER\
Esa carpeta genera nombres diferentes dentro de un index que a su vez crea unas carpetas con este tipo de nombres:
S-1-5-21-515967899-1482476501-1801674531-1003
Si se te ocurre un ejemplo de como hacerlo aunque no utilicemos un LV seria perfecto.
Gracias
-
Ctrl+z es algo que utilizo mucho, pero hay que decirlo todo, PUEDE SER MUY PELIGROSO a menos que estés acostumbrado a utilizar esa combinación.
Porque?
Muy sencillo, restaura todo tipo de cosas, lo que mandas a la papelera, un titulo de un archivo o carpeta e incluso lo que puedas haber modificado en el interior de algunos tipos de archivos tipo documentos.
De manera que si por error pulsas una vez mas de la cuenta, el desastre puede ser tremendo y no te enteras.
Ctrl+z o la flecha de deshacer para mi es perfecto, pero Windows tendría que mejorarlo y que el usuario sepa que es lo que se va a restaurar, o repito, puede ser un desastre monumental.
Este es un error que vienen repitiendo desde Win95 y que en el próximo Win10 también viene de la misma forma.
-
Estimado JBB
Una alternativa es que coloques un botón, y que al hacer clic le abra al usuario la papelera de reciclaje para que el usuario seleccione que es lo que necesita restaurar.
Una forma de hacerlo es por Shell, para ello tendrás que colocar dentro del evento clic del botón el siguiente código:
Shell "explorer " & "::{645FF040-5081-101B-9F08-00AA002F954E}", vbNormalFocus
Saludos, desde algún lugar de Lima-Perú
-
Hola Albertomi.
La opción de abrir la papelera ya la tengo puesta pero no me convence.
Necesito saber como lo hace Windows.
Gracias.
-
HOLA!!!
Windows tiene un registro de eventos que guarda el explorer.exe, en el mismo se guarda un log tal como:
move file1 file2
delete file1
rename file1 file2
todo asi, cuando pones control Z simplemente se revierte la accion.
Para info de como hacer restore en recycle bin: https://social.msdn.microsoft.com/Forums/vstudio/en-US/05f1476f-a101-4766-847b-0bdf4f6ad397/restore-undelete-file-from-recycle-bin
GRACIAS POR LEER!!!
-
Gracias 7913.
Lo malo es que esta en .net y C* y solo conozco vb6.
Aquí dejo la url del proyecto y funciona bien: http://www.codeproject.com/Articles/2783/How-to-programmatically-use-the-Recycle-Bin
Estuve meditando lo que dice Albertomi de guardar una lista de lo que se elimina y creo que esa formula puede servir.
Lo quiero probar un rato de estos.
De todas formas, muchas gracias.
-
Estimado JBB
Ando algo complicado de tiempo, por ello es que respondo algo rápido, pero no dudo que me captaras la idea.
1. Cada vez que elimines un archivo debes de mantener un control del nombre y la extensión del archivo eliminado, para diferenciarlo luego del resto de archivos que hay en la papelera de reciclaje. A esto le he llamado en seudo código "ListaDeArchivosEliminadosDesdeTuAplicacion"
2. Este procedimiento te permitirá, con alguna adecuación de tu parte, mostrar en un ListView por ejemplo, solo aquellos archivos eliminados desde tu aplicación descartando el resto de objetos que hay en la papelera de reciclaje.
Public Sub UpdateListViewFileToRestore()
Const ssfBITBUCKET = 10
Dim objShell As Object
Dim objRecycleBin As Object
Dim objRecycleBinItem As Object
Set objShell = CreateObject("shell.application")
Set objRecycleBin = objShell.Namespace(ssfBITBUCKET)
If (Not objRecycleBin Is Nothing) Then
With objRecycleBin
For Each objRecycleBinItem In .items
If objRecycleBinItem.Name = EstaEn_ListaDeArchivosEliminadosDesdeTuAplicacion Then
AdicionaAlListView_ArchivosRestaurables 'Esto lo implementas tu
End If
Next
End With
End If
Set objRecycleBinItem = Nothing
Set objRecycleBin = Nothing
Set objShell = Nothing
End Sub
3. Del ListView podrás seleccionar el elemento que quieran y restaurarlo a su ubicación original llamando a esta función. El parámetro FullName es el nombre del objeto más su extensión
Public Function RestoreFile(ByVal FullName As String) As Boolean
Const ssfBITBUCKET = 10
Const FOF_NOCONFIRMATION = 16
Dim strNameObject As String
Dim objShell As Object
Dim objRecycleBin As Object
Dim objFolderToRestore As Object
Dim objRecycleBinItem As Object
strNameObject = vbNullString
Set objShell = CreateObject("shell.application")
Set objRecycleBin = objShell.Namespace(ssfBITBUCKET)
If (Not objRecycleBin Is Nothing) Then
With objRecycleBin
For Each objRecycleBinItem In .items
If FullName = objRecycleBinItem.Name Then
Set objFolderToRestore = objShell.Namespace(objRecycleBinItem.ExtendedProperty("{9B174B33-40FF-11D2-A27E-00C04FC30871}2"))
objFolderToRestore.MoveHere objRecycleBinItem.Path, FOF_NOCONFIRMATION
ActualizaListaDeArchivosEliminadosDesdeTuAplicacion 'Esto lo implementas tu
Exit Function
End If
DoEvents
Next
End With
End If
Set objFolderToRestore = Nothing
Set objRecycleBinItem = Nothing
Set objRecycleBin = Nothing
Set objShell = Nothing
End Function
Saludos, desde algún lugar de Lima-Perú
-
Gracias Albertomi, este finde lo pruebo y ya diré que tal me resulto, aunque promete.