1

我正在尝试从剪贴板获取多个 Outlook附件。

当用户选择多个附件并将它们放置在剪贴板中(或拖动它们)时,IDataObject正在创建并放置在剪贴板中。

我知道可以在包含虚拟对象名称的IDataObjectusing中找到文件名。CLIPFORMAT CFSTR_FILEDESCRIPTOR另外,据我了解,文件内容是使用CLIPFORMAT CFSTR_FILECONTENTS. 但是当我这样做时,我只得到一个文件,我不明白如何获取已复制到剪贴板的其他文件。

我发现使用该lindex成员FORMATETC可以获取其他文件,但由于某种原因它不起作用。

谁能解释或举个例子我怎样才能得到其他附件(更喜欢C++)?

4

1 回答 1

0

查看CodeProject Outlook Drag-n-Drop 示例。它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++ 中实现类似的东西。

于 2012-06-15T14:17:46.773 回答