Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: CM2ARY en 17 Noviembre 2016, 03:15 am



Título: Enviar archivo a la Papelera de Reciclaje usando la API
Publicado por: CM2ARY en 17 Noviembre 2016, 03:15 am
Por favor nesecito ayuda para poder enviar archivo a la Papelera de Reciclaje usando la API de Windows con VB.NET.

Gracias a todos por la ayuda


Título: Re: Enviar archivo a la Papelera de Reciclaje usando la API
Publicado por: Konlex en 17 Noviembre 2016, 03:26 am
Aqui hay info sobre lo que buscas: Click aqui (http://www.elguille.info/vb/ejemplos/SHFILEOP.HTM)
saludos!


Título: Re: Enviar archivo a la Papelera de Reciclaje usando la API
Publicado por: okik en 17 Noviembre 2016, 13:54 pm
usando API tienes SHFileOperation

Aquí te dejo una clase NativeMethods con la función SHfileOpDelete creada por mí para enviar archivos a la papelera de reciclaje. Puedes establecer si quieres eliminarlo directamente  o  enviar a la papelera y si mostrar mensaje de confirmación o no:


para VB.NET
Código
  1. <System.Security.SuppressUnmanagedCodeSecurity()>
  2. Friend NotInheritable Class NativeMethods
  3.    Inherits Attribute
  4.    Private Sub New()
  5.    End Sub
  6.    ''' <summary>
  7.    ''' Copia un bloque de memoria de un lugar a otro.
  8.    ''' https://msdn.microsoft.com/es-es/library/windows/desktop/aa366535(v=vs.85).aspx
  9.    ''' </summary>
  10.    ''' <param name="Destination">Un puntero a la dirección inicial del destino del bloque copiado.</param>
  11.    ''' <param name="Source">Un puntero a la dirección inicial del bloque de memoria para copiar.</param>
  12.    ''' <param name="Length">El tamaño del bloque de memoria para copiar, en bytes.</param>
  13.    ''' <remarks></remarks>
  14.    <DllImport("KERNEL32", EntryPoint:="RtlMoveMemory")> _
  15.    Private Shared Sub CopyMemory(<MarshalAs(UnmanagedType.I1)> ByRef Destination As Byte,
  16.                           <MarshalAs(UnmanagedType.AsAny)> ByVal Source As Object, ByVal Length As Integer)
  17.    End Sub
  18.    'SHGetPathFromIDListW (En VB se usa este entrada)
  19.    ''' <summary>
  20.    '''Copia, mueve, cambia el nombre o elimina un objeto de sistema de archivos. Esta función se ha reemplazado en Windows Vista por IFileOperation.
  21.    '''https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx
  22.    ''' </summary>
  23.    ''' <param name="lpFileOp"></param>
  24.    ''' <returns></returns>
  25.    ''' <remarks></remarks>
  26.    <DllImport("shell32.dll", EntryPoint:="SHFileOperationA")> _
  27.    Public Shared Function SHFileOperation(<[In], [Out](), MarshalAs(UnmanagedType.Struct)> ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
  28.    End Function
  29.    ' Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
  30.    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
  31.    Public Structure SHFILEOPSTRUCT
  32.        Public hWnd As IntPtr
  33.        Public wFunc As Integer
  34.        <MarshalAs(UnmanagedType.LPStr)> Public pFrom As String
  35.        <MarshalAs(UnmanagedType.LPStr)> Public pTo As String
  36.        Public fFlags As UShort
  37.        <MarshalAs(UnmanagedType.Bool)> Public fAnyOperationsAborted As Boolean
  38.        Public hNameMappings As IntPtr
  39.        <MarshalAs(UnmanagedType.LPStr)> Public lpszProgressTitle As String
  40.    End Structure
  41.  
  42.  
  43.    Private Const FOF_CONFIRMMOUSE As Short = &H2S
  44.    Private Const FOF_ALLOWUNDO As Short = &H40S   'Envía a la papelera de reciclaje
  45.    Private Const FOF_FILESONLY As Short = &H80S
  46.    Private Const FOF_MULTIDESTFILES As Short = &H1S
  47.    Private Const FOF_NOCONFIRMATION As Short = &H10S '  No pedir confirmación al usuario.
  48.    Private Const FOF_NOCONFIRMMKDIR As Short = &H200S
  49.    Private Const FOF_NO_CONNECTED_ELEMENTS As Short = &H1000S
  50.    Private Const FOF_NOCOPYSECURITYATTRIBS As Short = &H800S
  51.    Private Const FOF_NOERRORUI As Short = &H400S
  52.    Private Const FOF_RENAMEONCOLLISION As Short = &H8S
  53.    Private Const FOF_SILENT As Short = &H4S   '  no crear avance/informe
  54.    Private Const FOF_SIMPLEPROGRESS As Short = &H100S
  55.    Private Const FOF_WANTMAPPINGHANDLE As Short = &H20S
  56.    Private Const FOF_WANTNUKEWARNING As Short = &H2000S
  57.    Private Const FOF_NORECURSION As Short = &H1000S '// don't recurse into directories.
  58.     Private Const FO_DELETE As Short = &H3
  59.  
  60.    ''' <summary>
  61.    ''' Función para borrar archivos
  62.    ''' </summary>
  63.    ''' <param name="Ounerhwnd"></param>
  64.    ''' <param name="sFile">Archivo o carpeta a eliminar</param>
  65.    ''' <param name="RecycleMode">boleano: True-> envía a la papelera de reciclaje, False ->no envía a la papelera</param>
  66.    ''' <param name="DialogConfirmation">Boleano: True-> muestra un diálogo, False-> no muestra diálogo</param>
  67.    ''' <remarks></remarks>
  68.    Public Shared Sub SHfileOpDelete(ByVal Ounerhwnd As IntPtr, ByVal sFile As String, ByVal RecycleMode As Boolean, ByVal DialogConfirmation As Boolean)
  69.        Dim Result As Integer = Nothing
  70.        Dim lenFileop As Integer
  71.        Dim foBuf() As Byte
  72.        Dim SHFileOp As New SHFILEOPSTRUCT
  73.        lenFileop = Marshal.SizeOf(SHFileOp)    ' double word alignment increase
  74.  
  75.        ReDim Preserve foBuf(CInt(lenFileop)) ' the size of the structure.
  76.  
  77.        With SHFileOp
  78.            .hWnd = Ounerhwnd
  79.            .wFunc = FO_DELETE
  80.            .pFrom = sFile & vbNullChar & vbNullChar
  81.            .hNameMappings = IntPtr.Zero
  82.            If RecycleMode Then
  83.                If DialogConfirmation Then
  84.                    .fFlags = FOF_ALLOWUNDO 'Envía a la papelera de reciclaje con diálogo de confirmación
  85.                Else
  86.                    .fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION 'Envía a la papelera de reciclaje sin  mensaje de confirmación
  87.                End If
  88.            Else
  89.                If DialogConfirmation Then
  90.                    .fFlags = FOF_SILENT 'Elimina diréctamente con diálogo de confirmación
  91.                Else
  92.                    .fFlags = FOF_NOCONFIRMATION Or FOF_SILENT 'Elimina directamente sin diálogo de confirmación
  93.                End If
  94.            End If
  95.        End With
  96.        CopyMemory(foBuf(1), SHFileOp, lenFileop)
  97.        CopyMemory(foBuf(19), foBuf(21), 12)
  98.        Try
  99.            Result = SHFileOperation(SHFileOp)
  100.  
  101.        Catch ex As Exception
  102.            MessageBox.Show(Err.Description)
  103.        End Try
  104.  
  105.    End Sub
  106. End Class


Para llamar a la función se hace de la siguiente manera:

Código
  1.     NativeMethods.SHfileOpDelete(Ounerhwnd:=Me.Handle,
  2.                                     sFile:="D:\01.rtf",
  3.                                     RecycleMode:=True,
  4.                                     DialogConfirmation:=True)

Ejemplo:
Código
  1. Imports System.Runtime.InteropServices
  2.  
  3. Public Class Form1
  4.    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  5.     NativeMethods.SHfileOpDelete(Ounerhwnd:=Me.Handle,
  6.                                     sFile:="D:\01.rtf",
  7.                                     RecycleMode:=True,
  8.                                     DialogConfirmation:=True)
  9.    End Sub
  10. End Class