Glisser-déposer d'un fichier joint de courrier électronique dans GroupWise vers une application .NET

StackOverflow https://stackoverflow.com/questions/896197

Question

Je suis en train de permettre à supprimer une pièce jointe d'un e-mail ouvert dans Novell GroupWise dans mon application C # WinForms. La fonctionnalité .NET standard ne fonctionne pas.

Dans le cas d'un contrôle DragDrop, e.Data.GetFormats () retourne le suivant.

FileGroupDescriptorW
FileGroupDescriptor
FileContents
attachment format

Je peux obtenir le nom de fichier avec e.Data.GetData ( "FileGroupDescriptor") et en allant à la position 76.

Malheureusement, e.Data.GetData ( "fileContents") provoque une première System.NotImplementedException de chance System.Windows.Forms.dll et retourne null. Format des pièces jointes renvoie également null.

Mes recherches me disent que le glisser-déposer est beaucoup plus complexe que ce que je pensais :) Il semble que GroupWise peut utiliser un format appelé CFSTR_FILECONTENTS mais qui est juste une supposition. Les pièces jointes peuvent être glissés et déposés avec succès sur le bureau de Windows ou d'autres dossiers.

Merci pour toutes suggestions.

Était-ce utile?

La solution

Je n'avais pas de chance de trouver cela aussi. Voici ce que je suis venu avec (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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top