Name der Datei immer kopiert von E-Mail-Anhang in VB.NET in der Zwischenablage kopieren
Frage
Wenn ein Benutzer kopiert eine Datei in die Zwischenablage in Windows aus einem Outlook-E-Mail-Anhang, ist es eine Möglichkeit, den Namen der Datei in VB.NET bekommen?
Wenn die Datei aus dem Windows Explorer kopiert wird, Clipboard.GetFileDropList
hat Daten, die ich verwenden kann, um dies zu erhalten, aber diese Liste ist leer, wenn die Datei von einem E-Mail Anhang kopiert wird (es gibt nur vier verfügbare Formate - FileGroupDescriptorW
, FileGroupDescriptor
, RenPrivateItem
und FileContents
).
Es fühlt sich an wie das möglich sein sollte, da ich die Datei in Windows Explorer einfügen kann und es fügt sie mit dem Namen des Anhangs.
Lösung
Es stellt sich heraus, dass Sie den Dateinamen aus dem Datenobjekt, dessen Format FileGroupDescriptor
ist zu bekommen. Der Code ist ein bisschen obskur, aber:
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