Drag'n'drop одно или несколько писем от Outlook до приложения C# WPF

У меня нет Django способа сделать это на первый взгляд, но у меня есть быстрое Javascript решение, которое вы можете иметь гораздо больше контроля.

function redirect(btn, url) {
    btn.on('click', function () {
      window.location.href = url; // A string
    })
}

var btn = <your btn>; // Use JQuery to get element as an ID
var url = <redirect url>;
redirect(btn, url);
32
задан Kent Boogaart 25 November 2008 в 11:48
поделиться

4 ответа

Я нашел отличную статью , которая должна делать именно то, что вам нужно.

ОБНОВЛЕНИЕ

Мне удалось получить код из этой статьи, работающий в WPF с небольшой настройкой, ниже приведены изменения, которые вам необходимо внести.

Измените все ссылки из System.Windows.Forms.IDataObject на System .Windows.IDataObject

В конструкторе OutlookDataObject измените

FieldInfo innerDataField = this.underlyingDataObject.GetType().GetField("innerData", BindingFlags.NonPublic | BindingFlags.Instance);

на

FieldInfo innerDataField = this.underlyingDataObject.GetType().GetField("_innerData", BindingFlags.NonPublic | BindingFlags.Instance);

Измените все вызовы DataFormats.GetFormat на DataFormats.GetDataFormat

Измените реализацию SetData с

public void SetData(string format, bool autoConvert, object data)
{
    this.underlyingDataObject.SetData(format, autoConvert, data);
}

на

public void SetData(string format, object data, bool autoConvert)
{
    this.underlyingDataObject.SetData(format, data, autoConvert);
}

С этими изменениями я смог заставить его сохранять сообщения в файлы, как это сделала статья. Извините за форматирование, но нумерованные / маркированные списки не работают с фрагментами кода.

36
ответ дан 27 November 2019 в 20:59
поделиться

Я нашел, что много решений, предлагающих Вас, использует “FileGroupDescriptor” для всех имен файлов и “FileContents” на объекте DragEventArgs получить данные каждого файла. “FileGroupDescriptor” хорошо работает для названий электронного письма, но “FileContents” возвращает пустой указатель, потому что реализация IDataObject в .NET не может обработать объект IStorage, который возвращается COM.

у David Ewen есть большое объяснение, превосходный образец и загрузка кода, которая работает отлично в http://www.codeproject.com/KB/office/outlook_drag_drop_in_cs.aspx .

5
ответ дан 27 November 2019 в 20:59
поделиться

В Вашем Xaml необходимо настроить Событие:

<TextBlock
        Name="myTextBlock"  
        Text="Drag something into here"
        AllowDrop="True" 
        DragDrop.Drop="myTextBlock_Drop"
        />

, После того как Вы Установили AllowDrop = Верный и Набор, Вы отбрасываете событие затем, переходят к коду позади и настраивают Ваше событие:

private void myTextBlock_Drop(object sender, DragEventArgs e)
{
         // Mark the event as handled, so TextBox's native Drop handler is not called.
         e.Handled = true;
         Stream sr;

          //Explorer 
          if (e.Data.GetDataPresent(DataFormats.FileDrop, true))
              //Do somthing

        //Email Message Subject 
        if (e.Data.GetDataPresent("FileGroupDescriptor"))
        {
            sr = e.Data.GetData("FileGroupDescriptor") as Stream;
                StreamReader sr = new StreamReader(sr2);//new StreamReader(strPath, Encoding.Default);
            //Message Subject
                    string strFullString = sr.ReadToEnd();
         }


}

, Если Вы хотите сломать его далее, можно использовать: FILEDESCRIPTOR или FILECONTENTS как схема в следующем статья

Ваша другая опция должны наброситься на перспективы MS Office Primary Interop Assemblies и повредить сообщение независимо тот путь.

3
ответ дан 27 November 2019 в 20:59
поделиться

Я думаю , Перетаскивание Стиля Shell в.NET (WPF и WinForms) может помочь Вам. После того как можно ответить для перетаскивания отбрасывания с помощью COM-интерфейсов, необходимо смочь вытащить данные из перспективы.

1
ответ дан 27 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: