VB.NETの電子メールの添付ファイルからクリップボードにコピーされたファイルの名前を取得する
質問
ユーザーがOutlookの電子メール添付ファイルからWindowsのクリップボードにファイルをコピーした場合、VB.NETでそのファイルの名前を取得する方法はありますか?
ファイルがWindowsエクスプローラーからコピーされた場合、 Clipboard.GetFileDropList
にはこれを取得するために使用できるデータがありますが、ファイルが電子メールの添付ファイルからコピーされるとそのリストは空になります( 4つの利用可能な形式- FileGroupDescriptorW
、 FileGroupDescriptor
、 RenPrivateItem
および FileContents
)。
ファイルをWindowsエクスプローラーに貼り付けることができ、添付ファイルの名前を付けて貼り付けるので、これが可能になるはずです。
解決
形式が FileGroupDescriptor
のデータオブジェクトからファイル名を取得できることがわかりました。ただし、コードは少し難解です:
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
所属していません StackOverflow