Vijay533 Ответов: 1

Как получить элемент электронной почты, программно выбранный пользователем в outlook с помощью C++/COM


Я создал проект для надстроек, используя следующую ссылку.
https://msdn.microsoft.com/en-us/library/office/ee941475%28v=office.14%29.aspx?f=255&MSPPError=-2147217396#BuildingNativeAddinforOL2010_Creatinganativeaddin

Мое требование состоит в том, чтобы получить электронные письма, выбранные пользователем одним нажатием кнопки на вкладке addins, и отправить эти входные данные в другую библиотеку dll. И я уже создал вкладку addins и кнопки в outlook, используя приведенную выше общую ссылку. Наша система управления хранилищем документов позволяет пользователям сохранять данные из outlook / word/excel.

Спасибо,
Виджей

Что я уже пробовал:

Я новичок в com-интерфейсах, поэтому я следовал тому же, что и в приведенной выше ссылке.

1 Ответов

Рейтинг:
1

Anderson Rissardi

У меня есть небольшой опыт работы с надстройками на c#, но я верю, что вы поймете эту концепцию.
Я считаю, что вы должны использовать Microsoft.Офис.Взаимодействуйте с классами COM, чтобы создать его.

Чтобы найти текущий выбранный Microsoft.Офис.Взаимодействие.Прогноз.Сообщения Вы можете использовать это:

Outlook.MailItem Email = null;
Outlook.Inspector actInspector = Outlook.Application.ActiveInspector();
if (actInspector == null)
{
    Outlook.Explorer explorer = Outlook.Application.ActiveExplorer();

    try
    {
        Email = explorer.GetType().InvokeMember("ActiveInlineResponse", System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Instance |
                System.Reflection.BindingFlags.Public, null, explorer, null) as Outlook.MailItem;
    }
    finally
    {
        Marshal.ReleaseComObject(explorer);
    }
}
else
{
    try
    {
        Email = actInspector.CurrentItem as Outlook.MailItem;
    }
    finally
    {
        if (actInspector != null) Marshal.ReleaseComObject(actInspector);
    }
}


это пришло от
http://stackoverflow.com/questions/40973773/how-to-reliably-know-what-object-is-current-in-focus-outlook-window-i-e-an-e/40979666#40979666

Чтобы получить все выбранные элементы MailItem в проводнике, вы можете использовать следующее:

Outlook.Explorer explorer = null;
Outlook.Selection selection = null;

try
{
    explorer = Global.OutlookApp.ActiveExplorer();
    selection = explorer.Selection;

    //selection.Count;  --Example
    foreach (MailItem item in selection)
    {
        //item.Subject -- Example
    }
}
finally
{
    if (selection != null)
       Marshal.ReleaseCOMObject(selection);

    if (explorer != null)
       Marshal.ReleaseCOMObject(explorer);
}


Vijay533

Большое вам спасибо за ваше предложение, Андерсон Риссарди.

Vijay533

Привет Андерсон Риссарди,
Я попытался добавить Microsoft.Офис.Interop.Word.dll в мой проект и получаю следующую ошибку.
Ошибка C1083: не удается открыть файл библиотеки типов: 'c:\program файлы\microsoft visual studio 10.0\инструменты visual studio для office\pia\office14\microsoft.office.interop.word.dll': ошибка загрузки библиотеки типов / DLL.

Anderson Rissardi

Убедитесь, что на компьютере установлен Microsoft Office и что у вас также есть инструменты Visual Studio для Office

Vijay533

Да, я установил MSOffice, у меня есть dll в моем каталоге.

Anderson Rissardi

Вы можете попробовать это "пошаговое руководство". https://msdn.microsoft.com/en-us/library/cc668191.aspx