Primeiros nome do arquivo copiado para área de transferência de anexo de email em VB.NET
Pergunta
Se um usuário copiar um arquivo para a área de transferência no Windows a partir de um anexo de e-mail Outlook, existe alguma maneira eu posso obter o nome do arquivo em VB.NET?
Se o arquivo é copiado a partir do Windows Explorer, Clipboard.GetFileDropList
tem dados que eu posso usar para obter isso, mas essa lista está vazia quando o arquivo é copiado de um anexo de e-mail (há apenas quatro formatos disponíveis - FileGroupDescriptorW
, FileGroupDescriptor
, RenPrivateItem
e FileContents
).
Parece que isso deve ser possível, desde que eu pode colar o arquivo no Windows Explorer e cola-lo com o nome do anexo.
Solução
Acontece que você pode obter o nome do arquivo do objeto de dados cujo formato é FileGroupDescriptor
. O código é um pouco misterioso, no entanto:
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