C#にてアプリからドラッグ&ドロップを受け入れたいのですが、FileContentsの結果がAll 0になってしまいます。
C#でのドラッグ&ドロップによる他のアプリからのデータ取得は、以下に公開されているソースを流用しました。
Outlook Drag and Drop in C#
しかし、FileContentsの取得結果がAll 0になってしまいます。サイズは取得すべきサイズになっていて正しいです。
FORMATETC構造体に設定する.lindexメンバー変数の値が正しく設定されていないせいだとおもい、FILEGROUPDESCRIPTOR構造体の.cItemsの値を設定してやってるんですが、やはりAll 0のままです。
何が悪いのかわかりません・・・
case "FileContents":
//override the default handling of FileContents which returns the
//contents of the first file as a memory stream and instead return
//a array of MemoryStreams containing the data to each file dropped
//get the array of filenames which lets us know how many file contents exist
// modified begin
//string[] fileContentNames = (string[])this.GetData("FileGroupDescriptor");
string[] fileContentNames = (string[])this.GetData("FileGroupDescriptorW"); // Unicode UTF-16LE
if (fileContentNames.Length <= 0)
fileContentNames = (string[])this.GetData("FileGroupDescriptor");
//create a MemoryStream array to store the file contents
MemoryStream[] fileContents = new MemoryStream[fileContentNames.Length];
//loop for the number of files acording to the file names
for(int fileIndex = 0;fileIndex < fileContentNames.Length;fileIndex++)
{
//get the data at the file index and store in array
// modified begin
//fileContents[fileIndex] = this.GetData(format, fileIndex);
if (gFileGrpDescW != null)
{
fileContents[fileIndex] = this.GetData(format, (int)gFileGrpDescW.cItems);
}
else if (gFileGrpDescA != null)
{
fileContents[fileIndex] = this.GetData(format, (int)gFileGrpDescA.cItems);
}
// modified end
}
// added
gFileGrpDescW = null;
gFileGrpDescA = null;
//return array of MemoryStreams containing file contents
return fileContents;
なお、具体的なアプリというのはEvernoteなのですが、Evernoteのノートを開発アプリにドラッグ&ドロップされたら直接受け取りたいのです。
一応元のコードをほぼそのまま使用しています。なお、ドラッグ&ドロップ時に複数のノートをまとめてドラッグすると、一つのデータとして受け取りますのでコード中のループは1度しか行われません。
Evernoteからエクスプローラ上に複数のノートをドラッグ&ドロップしても、一つのファイルとして出力されます。
FileContentsの情報取得については、以下の情報を参考にしています。
Shows how Email attachments can be dropped onto your own controls
しかし、前述の通りFileContentsがAll 0となってしまい、困っています。
宜しくお願いいたします。