我正在尝试从剪贴板中获取多个 Outlook个附件。
当用户选择多个附件并将其放入剪贴板(或拖动)时,正在创建IDataObject
并将其放置在剪贴板中。
我知道可以使用包含虚拟对象名称的IDataObject
在CLIPFORMAT CFSTR_FILEDESCRIPTOR
中找到文件名。另外,据我所知,我使用CLIPFORMAT CFSTR_FILECONTENTS
收到文件内容。但是当我这样做时,我只得到一个文件,而且我不明白如何获取已复制到剪贴板的其他文件。
我发现使用lindex
中的FORMATETC
成员我可以获取其他文件,但由于某种原因它无效。
任何人都可以解释或举例说明如何获取其他附件(更喜欢C ++ )?
答案 0 :(得分:0)
看看CodeProject Outlook Drag-n-Drop example。它在包装类IDataObject
中使用OutlookDataObject
,但它与剪贴板使用的界面相同。在C#中,您可以执行以下操作...
// IDataObject wrapper
OutlookDataObject dataObject = new OutlookDataObject(Clipboard.GetDataObject());
// retrieving filenames
string[] filenames = (string[])dataObject.GetData("FileGroupDescriptorW");
this.label1.Text = "filenames:\n " + string.Join(",", filenames) + "\n";
// writing out file contents
MemoryStream[] filestreams = (MemoryStream[])dataObject.GetData("FileContents");
this.label1.Text += "Files:\n";
for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++)
{
//use the fileindex to get the name and data stream
string filename = filenames[fileIndex];
MemoryStream filestream = filestreams[fileIndex];
this.label1.Text += " " + filename + "\n";
//save the file stream using its name to the application path
FileStream outputStream = File.Create(filename);
filestream.WriteTo(outputStream);
outputStream.Close();
}
查看OutlookDataObject
包装器类,您应该能够在C ++中实现类似的东西。