Pergunta

Eu estou tentando permitir que um anexo de um e-mail aberta no Novell GroupWise para ser descartado em meu aplicativo C # WinForms. A funcionalidade padrão .NET não funciona.

No evento DragDrop de um controle, e.Data.GetFormats () retorna o seguinte.

FileGroupDescriptorW
FileGroupDescriptor
FileContents
attachment format

posso obter o nome do arquivo com e.Data.GetData ( "FileGroupDescriptor") e ir para a posição 76.

Infelizmente, e.Data.GetData ( "fileContents") faz com que um primeiro System.NotImplementedException chance na System.Windows.Forms.dll e retorna nulo. formato de anexo também retorna null.

Minhas pesquisas me dizer que arrastar e soltar é muito mais complexa do que eu pensava :) Parece que GroupWise pode estar usando um formato chamado CFSTR_FILECONTENTS mas isso é apenas um palpite. Os anexos podem ser arrastados com sucesso e caiu para o desktop do Windows ou outras pastas.

Obrigado por todas as sugestões.

Foi útil?

Solução

Eu não tive sorte de encontrar este também. Aqui está o que eu vim com (GroupWise 7):

private void control_DragDrop(object sender, DragEventArgs e)
{
   string strFilename = null;

   //something about the act of reading this stream creates the file in your temp folder(?)
   using (MemoryStream stream = (MemoryStream)e.Data.GetData("attachment format", true))
   {
       byte[] b = new byte[stream.Length];
       stream.Read(b, 0, (int)stream.Length);
       strFilename = Encoding.Unicode.GetString(b);
       //The path/filename is at position 10.
       strFilename = strFilename.Substring(10, strFilename.IndexOf('\0', 10) - 10);
       stream.Close();
   }

   if (strFilename != null && File.Exists(strFilename))
   {
      //From here on out, you're just reading another file from the disk...
      using(FileStream fileIn = File.Open(strFilename, FileMode.Open))
      {
          //Do your thing
          fileIn.Close();
      }
   }

   File.Delete(strFilename);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top