Como criar um suplemento do Office 2000 COM no Visual Basic

Traduções deste artigo Traduções deste artigo
ID do artigo: 238228 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Microsoft Office 2000 e posterior suportam um novo, uniforme arquitetura de design para a criação de suplementos de aplicativo para aprimorar e controlar os aplicativos do Office. Esses suplementos são chamados de suplementos de COM. Este artigo demonstrará como criar um Add-in COM usando o Visual Basic.

Mais Informações

Um suplemento COM é um servidor COM inprocess (uma DLL ActiveX) que implementa a interface IDTExensibility2 conforme descrito na biblioteca do Microsoft Add-In Designer tipo (Msaddndr.dll). Todos os suplementos herdam essa interface e devem implementar cada um dos seus cinco métodos.

OnConnection

O evento OnConnection é acionado sempre que o suplemento está conectado. O add-in o pode estar conectado na inicialização, pelo usuário final, ou através de automação. Se OnConnection retorna com êxito, o add-in é considerado ser carregado. Se um erro for retornado, o aplicativo host libera imediatamente sua referência para o suplemento e o objeto é destruído.

OnConnection usa os seguintes quatro parâmetros:
  • Aplicativo - uma referência a objeto do aplicativo host.
  • ConnectMode - uma constante que especifica como o suplemento foi conectado.
    • ext_cm_AfterStartup - iniciado pelo usuário final na caixa de diálogo COM add-ins.
    • ext_cm_CommandLine - conectado a partir da linha de comando. (Não se aplica à criação de suplementos de COM para aplicativos do Office.)
    • ext_cm_External - conectado por um aplicativo externo através da automação. (Não se aplica à criação de suplementos de COM para aplicativos do Office.)
    • ext_cm_Startup - iniciado por host na inicialização do aplicativo. (Esse comportamento é controlado por uma configuração no registro.)
  • AddInInst - uma referência ao objeto COMAddIn que se refere a este suplemento na coleção COMAddIns para o aplicativo host.
  • Personalizado - uma matriz de tipos Variant pode armazenar dados definidos pelo usuário.

OnDisconnection

O evento OnDisconnection é acionado quando o suplemento está desconectado e apenas antes que ele descarrega da memória. O add-in deve executar qualquer limpeza de recursos nesse evento e restaurar as alterações feitas ao aplicativo host.

OnDisconnection usa dois parâmetros a seguintes:
  • RemoveMode - uma constante que especifica como o suplemento foi desconectado.
    • ext_dm_HostShutdown - desconectado quando o aplicativo host fechado.
    • ext_dm_UserClosed - desconectada pelo usuário final ou um controlador de automação.
  • Personalizado - uma matriz de tipos Variant pode armazenar dados definidos pelo usuário.

OnAddInsUpdate

O evento OnAddInsUpdate é acionado quando altera o conjunto de suplementos de COM registrados. Em outras palavras, sempre que um suplemento está instalado ou removido o aplicativo host, este evento é acionado.

OnStartupComplete e OnBeginShutdown

O OnStartupComplete e OnBeginShutdown métodos são chamados quando o aplicativo host deixou ou está entrando em um estado onde interação do usuário deve ser evitada porque o aplicativo está ocupado carregando ou descarregando próprio da memória. OnStartupComplete é chamado somente se o suplemento foi conectado durante a inicialização e OnBeginShutdown é chamado somente se o add-in for desconectado pelo host durante o desligamento.

Como a interface de usuário para o aplicativo host é totalmente ativa quando esses eventos acionados, eles podem ser a única maneira executar determinadas ações caso contrário, seria não está disponíveis de OnConnection e OnDisconnection.

Registrando o suplemento de COM

Em além para registro COM normal, um suplemento precisa se registrar com cada aplicativo do Office no qual ele é executado. Para se registrar com um determinado aplicativo, o suplemento deve criar uma chave de sub-rotina, usando o ProgID como o nome para a chave, no seguinte local:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
o suplemento pode fornecer valores neste local chave para um nome para exibição amigável e uma descrição completa. Além disso, o suplemento deve especificar seu comportamento de carga desejada usando um valor DWORD chamado "LoadBehavior." Esse valor determina como o suplemento é carregado pelo aplicativo host e é composto de uma combinação dos seguintes valores:
  • 0 = Desconectar - Não É carregado.
  • 1 = Conectado - É carregado.
  • 2 = Bootload - carregar na inicialização do aplicativo.
  • 8 = DemandLoad - carga somente quando solicitado pelo usuário.
  • 16 = ConnectFirstTime - carregar apenas uma vez (na próxima inicialização).
O valor típico especificado é 0 x 03 (conectado | Bootload).

Suplementos que implementam IDTExtensibility2 também devem especificar um DWORD valor chamado "CommandLineSafe" para indicar se eles são seguros para operações que não oferecem suporte a uma interface de usuário. Um valor de 0 x 00 significa False, 0 x 01 é True.

Criando um suplemento de COM

Você pode criar um suplemento COM das três maneiras mencionadas abaixo:

Criar um suplemento de COM usando o modelo de suplemento de Com

Se você tiver o Microsoft Office 2000 Developer ou Microsoft Office XP Developer e Visual Basic 6.0, a maneira mais fácil criar um suplemento é usar o modelo de in.vbp adicionar COM. Este projeto está localizado na subpasta ODETools\V9\Samples\OPG\Samples\CH11\VB_COM_AddIn no CD do Office 2000 Developer. Copie os arquivos nesta pasta para a pasta Template\Projects do Visual Basic 6.0, que normalmente é C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects. Copie o modelo de projeto para este local será Verifique se o modelo aparece na caixa de diálogo Novo projeto do Visual Basic 6.0. Consulte o capítulo 11 do guia do Microsoft Office 2000 Visual Basic Programmer para obter mais informações sobre este modelo e criar suplementos de COM.

Criando um suplemento de COM usando o add-in designer do Visual Basic 6

Se você tiver apenas o Microsoft Visual Basic 6.0 instalado e desejar usar um wrapper para que você não precise implementar IDTExtensibility2 diretamente, você pode usar o designer de suplementos mesmo que você deseja usar para criar um Add-In. do VB6 execute estas etapas para criar como um suplemento para o Microsoft Excel 2000 ou 2002:
  1. Inicie o Microsoft Visual Basic 6.0 e selecione o suplemento como o tipo de projeto. Isso deve adicionar uma classe designer para o projeto (Conectar) e um formulário (frmAddin).
  2. Abra a janela Designer para conectar e selecione Microsoft Excel na lista drop-down de aplicativo .
  3. Na lista drop-down de Comportamento de carregamento inicial , selecione inicialização .
  4. Remove o projeto frmAddin .
  5. Na janela Project , clique o item de conectar com o botão direito do mouse e selecione modo de exibição de código .
  6. Remova todo o código na janela de código do designer. Esse código funciona para VB add-ins, mas não Office add-ins.
  7. Adicione o seguinte código para o designer:
       Option Explicit
    
       Dim oXL As Object
       Dim WithEvents MyButton As Office.CommandBarButton
    
       Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
        ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
        ByVal AddInInst As Object, custom() As Variant)
          On Error Resume Next
          MsgBox "My Addin started in " & Application.Name
       
          Set oXL = Application
       
          Set MyButton = oXL.CommandBars("Standard").Controls.Add(1)
             With MyButton
                .Caption = "My Custom Button"
                .Style = msoButtonCaption
    
              ' The following items are optional, but recommended. 
              ' The Tag property lets you quickly find the control 
              ' and helps MSO keep track of it when there is more than
              ' one application window visible. The property is required
              ' by some Office applications and should be provided.
    
                .Tag = "My Custom Button"
     
              ' The OnAction property is optional but recommended. 
              ' It should be set to the ProgID of the add-in, such that if
              ' the add-in is not loaded when a user presses the button,
              ' MSO loads the add-in automatically and then raises
              ' the Click event for the add-in to handle. 
    
                .OnAction = "!<" & AddInInst.ProgId & ">"
    
                .Visible = True
             End With
       
       End Sub
    
       Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _
          AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
          On Error Resume Next
          MsgBox "My Addin was disconnected by " & _
             IIf(RemoveMode = ext_dm_HostShutdown, _
             "Excel shutdown.", "end user.")
          
          MyButton.Delete
          Set MyButton = Nothing
          Set oXL = Nothing
        End Sub
    
       Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton, _
         CancelDefault As Boolean)
          MsgBox "Our CommandBar button was pressed!"
       End Sub
  8. Salvar o projeto e criar MyAddin.dll . O designer registrará o suplemento para você.
  9. O Microsoft Excel aberto e você verá uma caixa de mensagem quando o suplemento é carregado e descarregado. Na barra de ferramentas padrão, você terá um novo botão rotulado como Meu botão personalizado que nosso suplemento tratará quando selecionado.

Criar um suplemento de COM usando implementa

Enquanto não como simples, você pode criar um suplemento de COM usando o Microsoft Visual Basic 5.0 e a palavra-chave Implements para implementar a interface IDTExtensibility2 diretamente. A única desvantagem dessa abordagem é o registro. Como o Microsoft Visual Basic não sabe como adicionar as chaves necessárias para registrar o suplemento com o Office, você precisará fazer isso separadamente (em um utilitário de instalação personalizada, ou usando um script REG).

No entanto, a vantagem de usar Implements é que ele é mais direto e eficiente do que usando o designer, e ele permite criar um único objeto COM que pode funcionar em vários aplicativos do Office (em vez de criar um objeto conectar separado para cada aplicativo que deseja trabalhar no).

Aqui estão as etapas para escrever um Add - in usando Implements:
  1. Abra o Visual Basic e crie um novo projeto ActiveX DLL. Nome do projeto MyCOMAddin e nome public class Connect .
  2. Na caixa de diálogo referências (projeto | referências), adicionar uma referência à biblioteca de objetos do Microsoft Office 9.0 (ou 10.0 para o Office XP) e a biblioteca de tipo criador de suplementos Microsoft. Se você não pode encontrar o criador de suplementos na lista de referências, você deve procurar Msaddndr.dll ou Msaddndr.tlb, normalmente localizado na pasta "C:\Arquivos de Programas\Arquivos Comuns\Designer".
  3. Na janela de código para conectar, adicione o seguinte:
       Option Explicit
       Implements IDTExtensibility2
    
       Dim oHostApp As Object
       Dim WithEvents MyButton As Office.CommandBarButton
    
      Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _
         ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    
         ByVal AddInInst As Object, custom() As Variant)
      
          On Error Resume Next
        ' Set a reference to the host application...
          Set oHostApp = Application
       
        ' If you aren't in startup, then manually call OnStartupComplete...
          If (ConnectMode <> ext_cm_Startup) Then _
             Call IDTExtensibility2_OnStartupComplete(custom)
          
       End Sub
    
       Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
          Dim oCommandBars As Office.CommandBars
          Dim oStandardBar As Office.CommandBar
       
          On Error Resume Next
        ' Set up a custom button on the "Standard" commandbar...
          Set oCommandBars = oHostApp.CommandBars
          If oCommandBars Is Nothing Then
           ' Outlook has the CommandBars collection on the Explorer object
             Set oCommandBars = oHostApp.ActiveExplorer.CommandBars
          End If
       
          Set oStandardBar = oCommandBars.Item("Standard")
          If oStandardBar Is Nothing Then
           ' Access names it's main toolbar Database
    
             Set oStandardBar = oCommandBars.Item("Database")
          End If
       
        ' In case the button was not deleted, use the exiting one...
          Set MyButton = oStandardBar.Controls.Item("My Custom Button")
             If MyButton Is Nothing Then
    
                Set MyButton = oStandardBar.Controls.Add(1)
                With MyButton
                   .Caption = "My Custom Button"
                   .Style = msoButtonCaption
     
              ' The following items are optional, but recommended. 
              ' The Tag property lets you quickly find the control 
              ' and helps MSO keep track of it when there is more than
              ' one application window visible. The property is required
              ' by some Office applications and should be provided.
    
                .Tag = "My Custom Button"
     
              ' The OnAction property is optional but recommended. 
              ' It should be set to the ProgID of the add-in, such that if
              ' the add-in is not loaded when a user presses the button,
              ' MSO loads the add-in automatically and then raises
              ' the Click event for the add-in to handle. 
    
                   .OnAction = "!<MyCOMAddin.Connect>"
    
                   .Visible = True
                End With
             End If
     
        ' Display a simple message to know which application you started in...
          MsgBox "Started in " & oHostApp.Name & "."
    
          Set oStandardBar = Nothing
          Set oCommandBars = Nothing
       End Sub
    
       Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As _
         AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
    
          On Error Resume Next
          If RemoveMode <> ext_dm_HostShutdown Then _
             Call IDTExtensibility2_OnBeginShutdown(custom)
          
          Set oHostApp = Nothing
    
       End Sub
    
       Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
          On Error Resume Next
        ' Notify the user you are shutting down, and delete the button...
          MsgBox "Our custom Add-In is unloading."
          MyButton.Delete
          Set MyButton = Nothing
       End Sub
    
       Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton,    CancelDefault As Boolean)
          MsgBox "Our CommandBar button was pressed!"
       End Sub
    
       Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
          'You do nothing if this is called, but you need to
          'add a comment so Visual Basic properly implements the function...
       End Sub
  4. Salvar o projeto e criar MyCOMAddin.dll . No entanto, antes do add-in funcionará você precisa associá-la a cada aplicativo do Office que você deseja que ele seja executado no. No mundo real, um utilitário de configuração pode fazer isso quando a DLL está instalada. Neste exemplo, você chamará uma função de registro diretamente a partir do IDE do Visual Basic.
  5. Adicione um novo módulo para o projeto. No código para Module1, adicione o seguinte:
       Option Explicit
    
       Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _
       Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
       ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As _
       Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, _
       phkResult As Long, lpdwDisposition As Long) As Long
       
       Private Declare Function RegSetValueEx Lib "advapi32.dll" _
       Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As _
       String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
       ByVal cbData As Long) As Long
       
       Private Declare Function RegDeleteKey Lib "advapi32.dll" _
       Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) _
       As Long
       
       Private Declare Function RegCloseKey Lib "advapi32.dll" _
       (ByVal hKey As Long) As Long
    
       Private Const HKEY_CURRENT_USER = &H80000001
       Private Const KEY_ALL_ACCESS = &H1F0037
       Private Const REG_CREATED_NEW_KEY = &H1
       Private Const REG_SZ = 1
       Private Const REG_DWORD = 4
    
       'These are the settings for your Add-in...
       Private Const PROGID As String = "MyCOMAddin.Connect"
       Private Const DESCRIPTION As String = "My VB5/6 COM Add-In Sample"
       Private Const LOADBEHAVIOR As Long = 3
       Private Const SAFEFORCOMMANDLINE As Long = 0
    
    
       Public Sub RegisterAll()
          RegisterOfficeAddin "Access"
          RegisterOfficeAddin "Excel"
          RegisterOfficeAddin "FrontPage"
          RegisterOfficeAddin "Outlook"
          RegisterOfficeAddin "PowerPoint"
          RegisterOfficeAddin "Word"
       End Sub
    
       Public Sub UnregisterAll()
          UnRegisterOfficeAddin "Access"
          UnRegisterOfficeAddin "Excel"
          UnRegisterOfficeAddin "FrontPage"
          UnRegisterOfficeAddin "Outlook"
          UnRegisterOfficeAddin "PowerPoint"
          UnRegisterOfficeAddin "Word"
       End Sub
    
       Public Sub RegisterOfficeAddin(sTargetApp As String)
          Dim sRegKey As String
          Dim nRet As Long, dwTmp As Long
          Dim hKey As Long
       
          sRegKey = "Software\Microsoft\Office\" & sTargetApp _
             & "\Addins\" & PROGID
       
          nRet = RegCreateKeyEx(HKEY_CURRENT_USER, sRegKey, 0, _
             vbNullString, 0, KEY_ALL_ACCESS, 0, hKey, dwTmp)
          
          If nRet = 0 Then
             If dwTmp = REG_CREATED_NEW_KEY Then
                Call RegSetValueEx(hKey, "FriendlyName", 0, _
                   REG_SZ, ByVal PROGID, Len(PROGID))
                Call RegSetValueEx(hKey, "Description", 0, _
                   REG_SZ, ByVal DESCRIPTION, Len(DESCRIPTION))
                Call RegSetValueEx(hKey, "LoadBehavior", 0, _
                   REG_DWORD, LOADBEHAVIOR, 4)
                Call RegSetValueEx(hKey, "CommandLineSafe", 0, _
                   REG_DWORD, SAFEFORCOMMANDLINE, 4)
             End If
             Call RegCloseKey(hKey)
          End If
       
       End Sub
    
       Public Sub UnRegisterOfficeAddin(sTargetApp As String)
          Dim sRegKey As String
          sRegKey = "Software\Microsoft\Office\" & sTargetApp _
             & "\Addins\" & PROGID
       
           Call RegDeleteKey(HKEY_CURRENT_USER, sRegKey)
       
       End Sub
  6. Na janela imediata (View | janela imediata), digite RegisterAll e, em seguida, pressione ENTER. Isso registrará o add-in com todos os os aplicativos do Office com suporte (Access, Excel, FrontPage, Outlook, PowerPoint e Word).
  7. Abrir qualquer dos aplicativos do Office listadas antes. Observe a caixa de mensagem na inicialização e desligamento e o botão personalizado à barra de ferramentas padrão.
  8. Quando você deseja cancelar o registro o add-in, digite UnregisterAll na janela Verificação imediata do Visual Basic e, em seguida, pressione ENTER.

Referências

"Microsoft Office 2000 Visual Basic Programmer Guide", Capítulo 11. Suplementos, modelos, assistentes e bibliotecas.

Para obter mais informações sobre como escrever suplementos de COM, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
230689EXEMPLO: Comaddin.exe Office 2000 suplemento escrito em Visual C++
190253Designers de VB6 não funcionam em VB5
Para obter mais informações sobre como desenvolver soluções baseadas na Web para o Microsoft Internet Explorer, visite o seguinte site:
http://msdn.microsoft.com/ie/
Observação Quando você adiciona um item de menu para o Office Word de um suplemento COM do Visual Basic, usando as etapas listadas neste artigo ou usando um método semelhante, o item de menu não funciona conforme o esperado. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
313948Word perde referência a itens de menu objeto COM (CommandBarControl)

Propriedades

ID do artigo: 238228 - Última revisão: quarta-feira, 24 de janeiro de 2007 - Revisão: 6.2
A informação contida neste artigo aplica-se a:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft FrontPage 2002 Standard Edition
  • Microsoft FrontPage 2000 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Outlook 2000
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbmt kbautomation kbhowto KB238228 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 238228

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com