Outlook Add-in(COM加載項)技術指南
OnDisconnection事件中,我們銷毀所有的全局對象。
OnStartupComplete事件主要的工作就是,創建工具欄和按鈕,如果它們不存在的話。
我們首先搜索Explorer對象的CommandBars集合,以察看我們的“短信速遞”工具欄是否存在。如果找到該工具欄,則只需使之可見。
如果沒有找到我們的工具欄,那么我們將創建工具欄:
通過傳遞命令欄的名稱及Temporary參數,代碼將把新的CommandBar對象添加到CommandBars集合中。
Temporary參數指出Outlook應該在Outlook會話間保持命令欄。然后,代碼開始創建命令上的按鈕。
為了創建按鈕,代碼將使用CommandBars對象的Controls集合。
然后,代碼將把2個按鈕控件添加到集合中??丶愋褪怯蒻soControlButton常量來標識的。
代碼還將為所有控件傳遞ID 1;表示這個控件是自定義控件而不是內置控件。
代碼還將傳遞Temporary參數并將它設置為False,以使Outlook在會話間保持按鈕。
代碼接收到來自于Control集合Add方法的CommandBarButton對象之后,它將開始設置CommandBarButton對象的屬性:
u Caption屬性:控件的默認屏幕提示;
u FaceId屬性:指定按鈕的外觀。
u Style屬性:比如,顯示按鈕外觀和標題文本的msoButtonIconAndCaption。
您看到,我們前面聲明g_oCreateSMSBHandler使用WithEvents關鍵詞,被聲明為Office.CommandBarButton,
它指出g_oCreateSMSBHandler用來響應CommandBarButton的事件。
OnBeginShutdown事件中,我們銷毀所有的全局對象。
在VB中,我們需要使用一些Outlook中的對象模型。下面我們一一列出:
這是整個模型的根對象。
根對象提供對其他對象模型的訪問。在 Outlook 中使用 VBA 時,Application 對象被隱含聲明,
這樣您可以選擇是否使用 Application 關鍵字。
用于訪問存儲項目(如文件夾)?!癕API”是唯一可以使用的名稱空間。
這是顯示 Outlook 項目集合的默認界面。每個不同的項目類型都有不同的瀏覽器。
在Office應用程序中,盡管菜單和工具欄按鈕看上去不太一樣,但實質上它們是相同類型的對象。
CommandBars集合包含程序中的所有命令條,如:工具條和菜單條。
每一個CommandBars集合都有一個CommandBar對象和它對應,CommandBar 對象可以包含其它的 CommandBar 對象,這些對象是作為按鈕或菜單命令來用的。每一個CommandBar都將通過CommandBarControls 對象被引用,
CommandBarControls又可以包含一組CommandBarControl對象。每一個CommandBarControl可以包含一個CommandBar對象,并可以通過它來存取控件屬性。每一個CommandBarControl對象,實際是對應CommandBarControls中的控件集合。
CommandBarControl可以有三種表現形式:
n 彈出式 (CommandBarPopup): 相當于菜單條的一個菜單項?
n 組合框(CommandBarComboBox):類似于工具條中組合框控件。它包括一個工具欄和緊接著工具欄的一個下拉箭頭。單擊該按鈕,將顯示出更多的帶圖標的菜單命令。
n 按鈕(CommandBarButton):相當于標準的工具欄按鈕,即帶有圖標的按鈕。
Items對象集合包括指定文件夾中所有Item條目對象。其中,
Item對象用于包含特定的 Outlook 數據,例如電子郵件消息、約會或聯系人。
Ø Outlook.AppointmentItem 日程的條目對象
Ø Outlook.ContactItem 聯系人的條目對象
Ø Outlook.MailItem 郵件的條目對象
Ø Outlook.NoteItem 便箋的條目對象
Selection對象包括在用戶界面中用戶選定的項目組。
在VB中,我們需要填寫類似于“g_oCreateSMSBHandler_Click”函數,對按鈕的點擊作出響應。下面我們一一列出兩個按鈕的事件:
這個按鈕的名稱是“創建短信”。
“聯系人列表”將從您的Outlook聯系人中讀取,只顯示那些提供了移動電話號碼的聯系人。您點擊某一個聯系人,我們把這個聯系人加入“收信人手機號碼”的編輯框中。
本事件主要的事情就是,彈出一個“發送短信”的對話框。并取出聯系人中設置了移動號碼的。
其他的細節我們就不再介紹了,介紹一下默認Outlook聯系人的獲取問題:
首先我們通過
Set olContacts = g_oNS.GetDefaultFolder(olFolderContacts).Items
獲得默認的聯系人文件夾的Items集合。
然后,用
For Each olContact In olContacts
遍歷這個Items集合。這個集合中的每一個對象都應該是一個“Outlook.ContactItem”Item對象。所以我們可以獲得這個Item對象的顯示名稱和移動手機號碼。
我們只顯示那些擁有移動手機號碼的聯系人。
代碼如下所示:
´ 準備取出聯系人中帶有移動號碼的作為收信人: ´ Dim olContacts As Outlook.Items Dim olContact As Outlook.ContactItem ´ ´ GetDefaultFolder 方法基于 FolderType 參數返回默認的文件夾 ´ (例如,olFolderInbox 常量將“收件箱”文件夾返回給當前登錄的用戶)。 ´ 我們現在選擇進入的是: ´ 包含 ContactItem 對象和 DistListItem 對象的“聯系人”文件夾 (olFolderContacts)。 Set olContacts = g_oNS.GetDefaultFolder(olFolderContacts).Items frmMenuMain.listContact.Clear Dim nIndex As Integer Dim szContactItem As String nIndex = 0 On Error Resume Next ´ 遍歷每一個聯系人: For Each olContact In olContacts If Len(olContact.MobileTelephoneNumber) = 11 Then ´ 聯系人的顯示名稱: szContactItem = Replace(olContact.FileAs, "[", "") szContactItem = Replace(szContactItem, "]", "") ´ 聯系人的移動號碼: frmMenuMain.listContact.AddItem szContactItem & "[" & _ olContact.MobileTelephoneNumber & "]", nIndex nIndex = nIndex + 1 End If Next On Error GoTo 0 |
[版權聲明:
第二章部分文字引用自《Programming Microsoft Outlook and Exchange》一書,該書作者Thomas Rizzo,特此聲明]
本文檔僅供參考。本文檔所包含的信息代表了在發布之日,zhengyun對所討論問題的當前看法,zhengyun不保證所給信息在發布之日以后的準確性。
原文轉自:http://www.anti-gravitydesign.com