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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top