Outlook Add-in(COM加载项)技术指南
      
                
          
            
              2.1.2
            
          
         
        
          
            .2. 
          
        
        
          
            IDTExtensibility2_OnDisconnection
          
        
        
          
            事件
          
        
        
          
                        
             
          
        
      
    
    
      
        OnDisconnection
      
      
        事件中
      
      
        ,
      
      
        我们销毁所有的全局对象
      
      
        。
      
      
        
      
        
          
            
              2.1.2
            
          
         
        
          
            .3. 
          
        
        
          
            IDTExtensibility2_OnStartupComplete
          
        
        
          
            事件
          
        
        
          
            
             
          
        
      
    
    
      
        OnStartupComplete
      
      
        事件主要的工作就是,创建工具栏和按钮,如果它们不存在的话。
      
      
        
      
        
      
        我们首先搜索
      
      
        Explorer
      
      
        对象的
      
      
        CommandBars
      
      
        集合
      
      
        ,
      
      
        以察看我们的
      
      
        “
      
      
        短信速递
      
      
        ”
      
      
        工具栏是否存在。如果找到该工具栏,则只需使之可见。
      
      
        
      
        如果没有找到我们的工具栏,那么我们将创建工具栏:
      
      
        
      
        通过传递命令栏的名称及
      
      
        Temporary
      
      
        参数,代码将把新的
      
      
        CommandBar
      
      
        对象添加到
      
      
        CommandBars
      
      
        集合中。
      
      
        
      
        Temporary
      
      
        参数指出
      
      
        Outlook
      
      
        应该在
      
      
        Outlook
      
      
        会话间保持命令栏。然后,代码开始创建命令上的按钮。
      
      
        
      
        为了创建按钮,代码将使用
      
      
        CommandBars
      
      
        对象的
      
      
        Controls
      
      
        集合。
      
      
        
      
        然后,代码将把
      
      
        2
      
      
        个按钮控件添加到集合中。控件类型是由
      
      
        msoControlButton
      
      
        常量来标识的。
      
      
        
      
        代码还将为所有控件传递
      
      
        ID 1
      
      
        ;表示这个控件是自定义控件而不是内置控件。
      
      
        
      
        代码还将传递
      
      
        Temporary
      
      
        参数并将它设置为
      
      
        False
      
      
        ,以使
      
      
        Outlook
      
      
        在会话间保持按钮。
      
      
        
      
        
      
        代码接收到来自于
      
      
        Control
      
      
        集合
      
      
        Add
      
      
        方法的
      
      
        CommandBarButton
      
      
        对象之后,它将开始设置
      
      
        CommandBarButton
      
      
        对象的属性:
      
      
        
      
        
          u
          
                   
          
        
      
      
        
          Caption
        
      
      
        属性:控件的默认屏幕提示;
      
      
        
      
        
          u
          
                   
          
        
      
      
        
          FaceId
        
      
      
        属性:指定按钮的外观。
      
      
        
      
        
          u
          
                   
          
        
      
      
        
          Style
        
      
      
        属性:比如,显示按钮外观和标题文本的
      
      
        msoButtonIconAndCaption
      
      
        。
      
      
        
      
        您看到,我们前面声明
      
      
        g_oCreateSMSBHandler
      
      
        使用
      
      
        WithEvents
      
      
        关键词,被声明为
      
      
        Office.CommandBarButton
      
      
        ,
      
      
        
      
        它指出
      
      
        g_oCreateSMSBHandler
      
      
        用来响应
      
      
        CommandBarButton
      
      
        的事件。
      
      
        
      
        
      
        
          
            
              2.1.2
            
          
         
        
          
            .4. 
          
        
        
          
            IDTExtensibility2_OnBeginShutdown
          
        
        
          
            事件
          
        
        
          
            
             
          
        
      
    
    
      
        OnBeginShutdown
      
      
        事件中
      
      
        ,
      
      
        我们销毁所有的全局对象
      
      
        。
      
      
        
      
        
      
        
          2.2.
        
      
      
        
          全局引用的变量
        
      
      
      
      
        
         
      
    
    
      
        在
      
      
        VB
      
      
        中,我们需要使用一些
      
      
        Outlook
      
      
        中的对象模型。下面我们一一列出:
      
      
        
      
        
      
      
      
        
          
            
              2.2.1
            
          
         
        
          
            .Application
          
        
        
          
            对象
          
        
        
        
        
          
           
        
      
    
    
      
        这是整个模型的根对象。
      
      
        
      
        根对象提供对其他对象模型的访问。在
      
      
         Outlook 
      
      
        中使用
      
      
         VBA 
      
      
        时,
      
      
        Application 
      
      
        对象被隐含声明,
      
      
        
      
        这样您可以选择是否使用
      
      
         Application 
      
      
        关键字。
      
      
        
      
        
      
      
      
        
          
            
              2.2.2
            
          
         
        
          
            .NameSpace
          
        
        
          
            对象
          
        
        
        
        
          
           
        
      
    
    
      
        用于访问存储项目(如文件夹)。“
      
      
        MAPI
      
      
        ”是唯一可以使用的名称空间。
      
      
        
      
        
      
      
      
        
          
            
              2.2.3
            
          
         
        
          
            .Explorer
          
        
        
          
            对象
          
        
        
        
        
          
           
        
      
    
    
      
        这是显示
      
      
         Outlook 
      
      
        项目集合的默认界面。每个不同的项目类型都有不同的浏览器。
      
      
        
      
        
      
      
      
        
          
            
              2.2.4
            
          
         
        
          
            .CommandBars
          
        
        
          
            集合
          
        
        
        
        
          
           
        
      
    
    
      
        在
      
      
        Office
      
      
        应用程序中,尽管菜单和工具栏按钮看上去不太一样,但实质上它们是相同类型的对象。
      
      
        
      
        CommandBars
      
      
        集合包含程序中的所有命令条,如:工具条和菜单条。
      
      
        
      
        每一个
      
      
        CommandBars
      
      
        集合都有一个
      
      
        CommandBar
      
      
        对象和它对应,
      
      
        CommandBar 
      
      
        对象可以包含其它的
      
      
         CommandBar 
      
      
        对象,这些对象是作为按钮或菜单命令来用的。每一个
      
      
        CommandBar
      
      
        都将通过
      
      
        CommandBarControls 
      
      
        对象被引用,
      
      
        
      
        CommandBarControls
      
      
        又可以包含一组
      
      
        CommandBarControl
      
      
        对象。每一个
      
      
        CommandBarControl
      
      
        可以包含一个
      
      
        CommandBar
      
      
        对象,并可以通过它来存取控件属性。每一个
      
      
        CommandBarControl
      
      
        对象,实际是对应
      
      
        CommandBarControls
      
      
        中的控件集合。
      
      
        
      
        CommandBarControl
      
      
        可以有三种表现形式:
      
      
        
      
        
          n
          
                     
          
        
      
      
        
          弹出式
        
      
      
        
           (CommandBarPopup)
        
      
      
        : 
      
      
        相当于菜单条的一个菜单项
      
      
        ? 
     
        
      
        
          n
          
                     
          
        
      
      
        
          组合框
        
      
      
        
          (CommandBarComboBox)
        
      
      
        :类似于工具条中组合框控件。它包括一个工具栏和紧接着工具栏的一个下拉箭头。单击该按钮,将显示出更多的带图标的菜单命令。
      
      
        
      
        
          n
          
                     
          
        
      
      
        
          按钮
        
      
      
        
          (CommandBarButton)
        
      
      
        :相当于标准的工具栏按钮,即带有图标的按钮。
      
      
        
      
        
      
      
      
        
          
            
              2.2.5
            
          
         
        
          
            .Items
          
        
        
          
            集合
          
        
        
        
        
          
           
        
      
    
    
      
        Items
      
      
        对象集合包括指定文件夹中所有
      
      
        Item
      
      
        条目对象。其中,
      
      
        
      
        Item
      
      
        对象用于包含特定的
      
      
         Outlook 
      
      
        数据,例如电子邮件消息、约会或联系人。
      
      
        
      
        
          Ø
          
                     
          
        
      
      
        
          Outlook.AppointmentItem
        
      
      
        
             
        
      
      
        日程的条目对象
      
      
        
      
        
          Ø
          
                     
          
        
      
      
        
          Outlook.ContactItem
        
      
      
        
                 
        
        
           
        
      
      
        联系人的条目对象
      
      
        
      
        
          Ø
          
                     
          
        
      
      
        
          Outlook.MailItem
        
      
      
        
                    
        
        
           
        
      
      
        邮件的条目对象
      
      
        
      
        
          Ø
          
                     
          
        
      
      
        
          Outlook.NoteItem
        
      
      
        
                  
        
        
            
        
        
           
        
      
      
        便笺的条目对象
      
      
        
      
        
      
      
      
        
          
            
              2.2.6
            
          
         
        
          
            .Selection
          
        
        
          
            集合
          
        
        
        
        
          
           
        
      
    
    
      
        
              
        
        Selection
      
      
        对象包括在用户界面中用户选定的项目组。
      
      
        
      
        
          2.3.
        
      
      
        
          处理按钮事件
        
      
      
      
      
        
         
      
    
    
      
        在
      
      
        VB
      
      
        中,我们需要填写类似于“
      
      
        g_oCreateSMSBHandler_Click
      
      
        ”函数,对按钮的点击作出响应。下面我们一一列出两个按钮的事件:
      
      
        
      
        
      
      
      
        
          
            
              2.3.1
            
          
         
        
          
            .
          
          
          
        
        
          
            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 不保证所给信息在发布之日以后的准确性。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12756


 
					 
					