Где воздух гор - там тишина снегов, молчание камней и дремлет сила

Программирование Windows

Домашняя страница в MS Outlook

2018-03-10 09:22:18







Задача в данном случае достаточна тривиальна.  Нужно добавить  в MS Outlook 2007 домашнюю страницу или просто, некий сайт,  появляющуюся при запуске программы. 
Мы сделаем так, чтобы загружалась стартовая страница «Google».  Для этого нам понадобится такие программы:
А. Microsoft  Visual Studio 2005(или более новая версия)
B. Microsoft Office 2007
C. Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System. Это можно легко  скачать с сайта компании.Размер файла чуть больше 6 Мб. Затем нужно установить.

      Итак, запускаем  VS Studio и выбираем в меню “New project”.Тамнаходим  “VC#/2007-Add-ins”. Вводим название  проекта, например, “PlugOutlook” и жмем “Ok”.
Далее все шаги будут расписаны пошагово.
.    После создания проекта нужно сразу желательно скомпилировать  его.  Это необходимо для проверки настроек проекта. Если что-то не так, то мы сможем избавиться от ошибок, которые могут появиться  вследствие отсутствия необходимых DLL библиотек.  Мы сможем сразу добавить эти библиотеки и позволит избежать ошибок да и сэкономит нам время на отладку. Если  же появиться окно MS Outlook 2007, значит все в порядке.  Исходный код программы в начале будет  выглядеть так:

using System;
using System.Windows.Forms;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

namespace PlugOutlook
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        ///
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        ///

        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}
2.    Теперь нам нужно внести в  этот код наши изменения. В класс проекта после строки «public partial class ThisAddIn { » вводим собственный код. Нам необходимо создать объекты и переменные,  которые будут использоваться в последствии. Редактируем код следующим образом:

private string viewName = "Google";// строковая переменаня имени новой папки
private Outlook.MAPIFolder vGoogleView = null;//объектпапки
private Outlook.NameSpace _mapiNamespace;//исрользуемоепространствоимен
private Outlook.ApplicationClass _app = new  Outlook.ApplicationClass();//объектклассаприложения MS Outlook
 
3.Теперь нужно создать метод, который будет создавать папку внутри  MS  Outlook  и загружать туда страницу сайта. Назовем этот метод « DoGoogleVFolder()» Будет у нас он «void», так как возвращать этому методу ничего не нужно. Исходный код будте таковым:

         private void DoGoogleVFolder()
        {
            
            Outlook.MAPIFolder inBox = (Outlook.MAPIFolder)_app.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            Outlook.Folders searchFolders = (Outlook.Folders)inBox.Folders;

            bool foundView = false;
            foreach (Outlook.MAPIFolder searchFolder in searchFolders)
            {
                if (searchFolder.Name == viewName)
                {
                    vGoogleView = inBox.Folders[viewName];
                    foundView = true;
                }
            }
            if (!foundView)
            {
                vGoogleView = (Outlook.MAPIFolder)inBox.Folders.Add("Google", Outlook.OlDefaultFolders.olFolderInbox);
                vGoogleView.WebViewURL = "http://www.google.com";
                vGoogleView.WebViewOn = true;
                vGoogleView = inBox.Folders[viewName];

            }
            _app.Application.ActiveExplorer().SelectFolder(vGoogleView);
            _app.Application.ActiveExplorer().CurrentFolder.Display();
        }

Теперь необходимые пояснения. В начален мы создаем объект типа MAPIFolder, чтобы получить доступ к структуре каталогов MS Outlook

Outlook.MAPIFolder inBox = (Outlook.MAPIFolder)_app.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

Затем мы создаем переменную булевого типа для  «foundView» и присваем ей значение  «false».Это нужно, чтобы создать цикл foreach, который будет искать в папках MS Outlook наличие или отсуствие нашей вновь создавамемой папки. Для чего это? Чтобы не создавать снова и снова папку с таким же названием при запуске  Outlook. Если папка не обнаружена,то она создается:

vGoogleView = (Outlook.MAPIFolder)inBox.Folders.Add("Google", Outlook.OlDefaultFolders.olFolderInbox);

Затем мы в качестве свойств вновь созданной папки ставим:

vGoogleView.WebViewURL = "http://www.google.com";
vGoogleView.WebViewOn = true;
vGoogleView = inBox.Folders[viewName];

Первое задает URL сайта, который мы будем показвать в нашей папке.
Второе включает режим его показа,а третье помещает имя папки в каталог MS Outlook.

На конец, мы активируем нашу папку посредством, как бы связывая ее с текущим объектом MS Outlook.

   _app.Application.ActiveExplorer().SelectFolder(vGoogleView);
   _app.Application.ActiveExplorer().CurrentFolder.Display();

В начале мы делаем активной при запуске нашу папку, а затем она отображается.
Компилируем, все проходит удачно, но никакой папки мы не видим. И это естественно.
 
4.     Потому что нам надо вызвать наш метод, а пока что он у нас существует как бы вне зоны действия приложения. Для этого в коде плагина или правильнее сказать, add-onа есть метод  «ThisAddIn_Startup». Он всегда исполняется при запуске программы. Вот внутрь этого метода нужно и поместь наш новый метод « DoGoogleVFolder()»:
 
  private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
             DoGoogleVFolder();
        }

 
Компилируем и видим что все получилось.  Стартовая страница  появляется внутри нашего MS Outlook.  Далее весь  исходный код этой программы.

using System;
using System.Windows.Forms;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

namespace PlugOutlook
{
    public partial class ThisAddIn
    {

        private string viewName = "Google";
        private Outlook.MAPIFolder vGoogleView = null;
        private Outlook.NameSpace _mapiNamespace;
        private Outlook.ApplicationClass _app = new Outlook.ApplicationClass();
 

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
             DoGoogleVFolder();
        }
 
         private void DoGoogleVFolder()
        {
           
            Outlook.MAPIFolder inBox = (Outlook.MAPIFolder)_app.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            Outlook.Folders searchFolders = (Outlook.Folders)inBox.Folders;

            bool foundView = false;
            foreach (Outlook.MAPIFolder searchFolder in searchFolders)
            {
                if (searchFolder.Name == viewName)
                {
                    vGoogleView = inBox.Folders[viewName];
                    foundView = true;
                }
            }
            if (!foundView)
            {
                vGoogleView = (Outlook.MAPIFolder)inBox.Folders.Add("Google", Outlook.OlDefaultFolders.olFolderInbox);
                vGoogleView.WebViewURL = "http://www.google.com";
                vGoogleView.WebViewOn = true;
                vGoogleView = inBox.Folders[viewName];

            }
            _app.Application.ActiveExplorer().SelectFolder(vGoogleView);
            _app.Application.ActiveExplorer().CurrentFolder.Display();
        }
 
 
 
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

           

        ///
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        ///

        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

       
    }
}
 

Здесь нет комментариев


Новый комментарий:
























Яндекс.Метрика