Перетащите из окна Outlook в файл приложения .EXE (или значок) в .Net - PullRequest
1 голос
/ 05 марта 2012

Об этом уже спрашивали, но с методами, которые я видел, я не могу получить то, чего хочу.В настоящее время у меня есть форма Windows, которая, если я запустил .EXE (и открою саму форму), я могу без проблем выбросить в нее электронные письма из внешнего вида.Тем не менее, я ищу такую ​​возможность, когда пользователь перетаскивает сообщение прямо из Outlook на значок в .EXE-файле.Я могу сделать это нормально, если я сохраню файл локально и перетащу его на значок, но прямо из Outlook я получаю круг с линией через него.Есть ли свойство, которое мне нужно установить в приложении, чтобы сделать эту работу.Я использовал этот код, чтобы заставить сообщение работать в окне формы.

http://www.codeproject.com/Articles/28209/Outlook-Drag-and-Drop-in-C

Это код, который я написал, который помещается на Icon.

 static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var form = new Form1();

        if (args.Length > 0)
        {
            form.ProcessCommandLine(args[0]);
        }

        Application.Run(form);
    }
}

 public void ProcessCommandLine(string commandLine)
    {
        lstFiles.Items.Clear();

        var fileAttributes = File.GetAttributes(commandLine);
        if (fileAttributes.HasFlag(FileAttributes.Directory))
        {
            ProcessDirectory(commandLine);
        }
        else
        {
            ProcessFile(commandLine);
        }
    }

Любая помощь будет оценена, спасибо.

1 Ответ

3 голосов
/ 05 марта 2012

Вы хотите создать Shell Drop Handler .Как вы обнаружили, обработчик удаления по умолчанию для файлов .EXE принимает любой файл в качестве элемента, подлежащего удалению, и автоматически запускает приложение с указанием пути к удаленному файлу.Другие элементы, такие как почта или объект календаря, перетаскиваемые напрямую из Outlook, не поддерживаются Windows Explorer напрямую.Один из примеров обработчика перетаскивания, включенного в Windows, - если вы перетаскиваете файл в ZIP-файл, он автоматически добавляет этот файл в ZIP-архив при перетаскивании.

Если вы все еще хотите создать собственное перетаскиваниеобработчик, вы можете выполнить любое настраиваемое действие, когда любой отброшенный элемент будет удален в любом файле (например, значок вашей программы, ярлык и т. д.). Это не тривиальная задача, и написание расширений оболочки из управляемого кода (C # или VB)как правило, не рекомендуется.(См .: http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx)

Как только вы создадите свой обработчик перетаскивания, это будет двухэтапный процесс:

  1. Во время установки программы создайте файл на рабочем столе с уникальным файломрасширение (например, .myprogdroptarget).
  2. Зарегистрируйте обработчик перетаскивания для .myprogdroptarget, чтобы этот значок стал «волшебной» целью перетаскивания объектов.

Для некоторого примера кода о том, какчтобы создать обработчик отбрасывания в ATL / C ++, ознакомьтесь с структурой кода Microsoft All-In-One , в частности с классом ATLShellExtDragAndDropHandler.cpp

Альтернативное решение:

Подумайте о создании гаджета для рабочего стола Windows, который выполняет аналогичные функции. Кодирование должно быть проще, поскольку вам не нужно копаться в C ++. Когда-то был гаджет Vista под названием «Волшебная папка», который принимал элементы в качестве целей удаления.Я больше не могу найти его в галерее Windows. Вот статья, в которой описано, как это работает:

http://www.howtogeek.com/howto/windows-vista/keep-your-vista-desktop-clean-with-the-magic-folder/

А вот ссылка на автора (возможно, он поделитсяисходный код, если вы спросите приятно): http://davecra.wordpress.com/

...