Obtener el nombre del archivo copiado al portapapeles desde el archivo adjunto de correo electrónico en VB.NET
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.
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