1

クリップボードから複数の Outlook添付ファイルを取得しようとしています。

ユーザーが複数の添付ファイルを選択してクリップボードに配置すると(またはドラッグして)、IDataObjectが作成されてクリップボードに配置されます。

ファイル名は、仮想オブジェクト名を含むIDataObjectusingで見つけることができることを知っています。CLIPFORMAT CFSTR_FILEDESCRIPTORまた、私が理解していることから、ファイルの内容はを使用して受信されていCLIPFORMAT CFSTR_FILECONTENTSます。しかし、それを行うと、1つのファイルしか取得できず、クリップボードにコピーされた他のファイルを取得する方法がわかりません。

lindexでメンバーを使用するFORMATETCと他のファイルを取得できることがわかりましたが、何らかの理由で機能しません。

誰かが他の添付ファイル( C ++を好む)を取得する方法を説明または例を挙げてもらえますか?

4

1 に答える 1

0

CodeProjectOutlookのドラッグアンドドロップの例を見てください。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 に答える