|
Задача в данном случае достаточна тривиальна. Нужно добавить в 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
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> 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) { }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InternalStartup() { this.Startup += new System.EventHandler(ThisAddIn_Startup); this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); }
} }
|