Получение нескольких вложений Outlook из буфера обмена
Я пытаюсь получить несколько вложений Outlook из буфера обмена.
Когда пользователь выбирает несколько вложений и помещает их в буфер обмена (или перетаскивает их), IDataObject
создается и помещается в буфер обмена.
Я знаю, что имена файлов можно найти в IDataObject
с помощью CLIPFORMAT CFSTR_FILEDESCRIPTOR
который содержит имена виртуальных объектов. Кроме того, я из того, что я понимаю, содержимое файла получает с использованием CLIPFORMAT CFSTR_FILECONTENTS
, Но когда я это делаю, я получаю только один файл, и я не понимаю, как мне получить другие файлы, которые были скопированы в буфер обмена.
Я обнаружил, что с помощью lindex
член в FORMATETC
Я могу получить другие файлы, но по какой-то причине это не работает.
Может кто-нибудь объяснить или привести пример, как я могу получить другие вложения (предпочитая C++)?
1 ответ
Взгляните на пример перетаскивания в CodeProject Outlook. Оно использует 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++.