2008-11-18 4 views
4

Si un utilisateur copie un fichier dans le presse-papiers dans Windows à partir d'une pièce jointe de messagerie Outlook, est-il possible que je peux obtenir le nom de ce fichier dans VB.NET ?Se nom du fichier copié dans le presse-papier pièce jointe à VB.NET

Si le fichier est copié à partir de Windows Explorer, Clipboard.GetFileDropList a des données que je peux utiliser pour obtenir, mais cette liste est vide lorsque le fichier est copié à partir d'une pièce jointe (il y a seulement quatre formats disponibles - FileGroupDescriptorW, FileGroupDescriptor, RenPrivateItem et FileContents).

Il me semble que 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.

Répondre

5

Il s'avère que vous pouvez obtenir le nom de fichier de l'objet de données dont le format est FileGroupDescriptor. Le code est un peu obscur, 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 
+0

[ 'Clipboard.GetDataObject() (.GetFormats)'] (http://msdn.microsoft.com/en-us/library/1745023c.aspx) de [ 'IDataObject'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.idataobject.aspx) vous fournira tous les formats de données disponibles. – SliverNinja

+0

un Nice. Si vous avez besoin également d'extraire la pièce jointe à un fichier rendez-vous ici: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/affcf9cd-704d-4ea2-b80b-4c09062af72d –

Questions connexes