Obtenir le nom du fichier copié dans le Presse-papiers à partir d'une pièce jointe à un courrier électronique dans VB.NET

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

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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top