Obtenir le nom du fichier copié dans le Presse-papiers à partir d'une pièce jointe à un courrier électronique dans VB.NET
Question
Si un utilisateur copie un fichier dans le Presse-papiers de Windows à partir d'une pièce jointe à un courrier électronique Outlook, puis-je obtenir le nom de ce fichier dans VB.NET?
Si le fichier est copié à partir de l'Explorateur Windows, Clipboard.GetFileDropList
contient des données que je peux utiliser pour obtenir cela, mais cette liste est vide lorsque le fichier est copié à partir d'une pièce jointe (il y a simplement quatre formats disponibles - FileGroupDescriptorW
, FileGroupDescriptor
, RenPrivateItem
et FileContents
).
Cela devrait être possible, car je peux coller le fichier dans l'explorateur Windows et le coller avec le nom de la pièce jointe.
La solution
Il s’avère que vous pouvez obtenir le nom du fichier à partir de l’objet de données dont le format est FileGroupDescriptor
. Le code est un peu mystérieux, cependant:
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