Obtener el nombre del archivo copiado al portapapeles desde el archivo adjunto de correo electrónico en VB.NET

StackOverflow https://stackoverflow.com/questions/299805

Pregunta

Si un usuario copia un archivo al portapapeles en Windows desde un archivo adjunto de correo electrónico de Outlook, ¿hay alguna forma de obtener el nombre de ese archivo en VB.NET?

Si el archivo se copia desde el Explorador de Windows, Clipboard.GetFileDropList tiene datos que puedo usar para obtener esto, pero esa lista está vacía cuando el archivo se copia desde un archivo adjunto de correo electrónico (solo hay cuatro formatos disponibles: FileGroupDescriptorW , FileGroupDescriptor , RenPrivateItem y FileContents ).

Parece que esto debería ser posible, ya que puedo pegar el archivo en el Explorador de Windows y lo pega con el nombre del archivo adjunto.

¿Fue útil?

Solución

Resulta que puede obtener el nombre de archivo del objeto de datos cuyo formato es FileGroupDescriptor . Sin embargo, el código es un poco arcano:

Dim fileName As New StringBuilder("")
Dim theStream As Stream = Clipboard.GetData("FileGroupDescriptor")
Try
    Dim fileGroupDescriptor(512) As Byte
    theStream.Read(fileGroupDescriptor, 0, 512)

    Dim i As Integer = 76
    While fileGroupDescriptor(i) <> 0
        fileName.Append(Convert.ToChar(fileGroupDescriptor(i)))
        i += 1
    End While
Finally
    If theStream IsNot Nothing Then theStream.Close()
End Try
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top