Палец вверх 1
Перевод
Перевод

Перетащите из окна Outlook в файл приложения .EXE (или значок) в .Net

Об этом уже спрашивали, но с методами, которые я видел, я не могу получить то, что хочу. В настоящее время у меня есть форма 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);
        }
    }

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

c# winforms drag-and-drop outlook icons
задан Isaac Levin 5 мар. 2012 г., 21:20:48
источник

1 ответ

Палец вверх 3
Перевод
Перевод

Вы ищете, чтобы создать Shell Drop Handler . Как вы обнаружили, обработчик удаления по умолчанию для файлов .EXE принимает любой файл в качестве элемента сброса и автоматически запускает приложение с указанием пути к удаленному файлу. Другие элементы, такие как почта или объект календаря, перетаскиваемые напрямую из Outlook, напрямую не поддерживаются проводником Windows. Один из примеров обработчика перетаскивания, включенного в 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 Desktop, который выполняет аналогичные функции. Кодирование должно быть проще, так как вам не придется копаться в C ++. Когда-то был гаджет Vista под названием «Волшебная папка», который принимал предметы в качестве мишеней, но я больше не могу найти его в галерее Windows. Вот статья, в которой описано, как это работает:

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

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

ответ дан Kevin McCormick 5 мар. 2012 г., 22:30:03
источник