Como criar um suplemento do Office 2000 COM no Visual Basic

Traduções de Artigos Traduções de Artigos
Artigo: 238228 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Microsoft Office 2000 e posteriores suportam uma nova, uniform arquitectura de estrutura para criar suplementos aplicação para melhorar e controlar aplicações do Office. Estes suplementos são designados por suplementos COM. Este artigo vai demonstrar como criar um Add-in COM utilizando o Visual Basic.

Mais Informação

Um suplemento COM é um servidor de COM (uma DLL de ActiveX) inprocess que implementa a interface IDTExensibility2 conforme descrito na biblioteca do Microsoft suplementos Designer tipo (Msaddndr.dll). Todos os suplementos COM herdam desta interface e tem de implementar cada uma das respectivos cinco métodos.

OnConnection

O evento OnConnection é accionado sempre que o suplemento está ligado. O suplemento a pode ser ligado no arranque, pelo utilizador final, ou através de automatização. Se OnConnection devolve com êxito, diz-se o suplemento que está a carregar. Se for devolvido um erro, a aplicação inicial imediatamente liberta a referência do suplemento e o objecto é destruído.

OnConnection assume os quatro parâmetros seguintes:
  • Aplicação - A fazer referência ao objecto de aplicação anfitrião.
  • ConnectMode - constante que especifica como o suplemento estava ligado.
    • ext_cm_AfterStartup - iniciado pelo utilizador final da caixa de diálogo Suplementos COM.
    • ext_cm_CommandLine - ligado na linha de comandos. (Não se aplica à criação de suplementos para aplicações do Office.)
    • ext_cm_External - ligados por uma aplicação externa através de automatização. (Não se aplica à criação de suplementos para aplicações do Office.)
    • ext_cm_Startup - iniciado pelo anfitrião no arranque da aplicação. (Este comportamento é controlado por uma definição no registo.)
  • AddInInst - uma referência ao objecto COMAddIn que se refere este suplemento na colecção COMAddIns para a aplicação anfitrião.
  • Personalizada - uma matriz de variantes que pode conter dados definidos pelo utilizador.

OnDisconnection

O evento OnDisconnection é accionado quando o suplemento está desligado e antes de descarrega da memória. O suplemento deve efectuar qualquer limpeza de recursos neste caso e restaurar todas as alterações efectuadas a aplicação inicial.

OnDisconnection assume os dois parâmetros seguintes:
  • RemoveMode - constante que especifica como o suplemento foi desligado.
    • ext_dm_HostShutdown - desligado quando a aplicação inicial fechado.
    • ext_dm_UserClosed - desligado pelo utilizador final ou um controlador de automatização.
  • Personalizada - uma matriz de variantes que pode conter dados definidos pelo utilizador.

OnAddInsUpdate

O evento OnAddInsUpdate é accionado quando altera o conjunto de suplementos COM registados. Por outras palavras, sempre que um suplemento for instalado ou removido a aplicação inicial, este evento é accionado.

OnStartupComplete e OnBeginShutdown

Métodos de OnStartupComplete e OnBeginShutdown denominam-se quando a aplicação inicial saiu ou está a entrar num estado onde interacção do utilizador deve ser evitada porque a aplicação está ocupada a carregar ou descarregar próprio da memória. OnStartupComplete apenas é chamado se o suplemento estava ligado durante o arranque e OnBeginShutdown só é chamado se o suplemento for desligado pelo anfitrião durante o encerramento.

Uma vez que a interface de utilizador para a aplicação inicial é totalmente activa quando estes eventos accionados, podem ser a única forma de efectuar determinadas acções que caso contrário, seriam indisponíveis OnConnection e OnDisconnection.

Registar o COM adicionar-in

Em juntamente para registo COM normal, um suplemento tem registar-se com cada aplicação do Office em que é executado. Para registar-se com uma determinada aplicação, o suplemento deve criar uma chave de sub, utilizando o respectivo ID de programa como o nome da chave, na seguinte localização:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
o suplemento pode fornecer valores nesta localização chave para um nome amigável e uma descrição completa. Além disso, o suplemento deve especificar o comportamento de carregamento pretendida utilizando um valor DWORD denominado "LoadBehavior." Este valor determina como o suplemento é carregado por aplicação anfitriã e é constituído por uma combinação dos seguintes valores:
  • 0 = Desligar - não é carregado.
  • 1 = Ligado - É carregado.
  • 2 = Bootload - carga na aplicação de arranque.
  • 8 = DemandLoad - carregar apenas quando solicitado pelo utilizador.
  • 16 = ConnectFirstTime - carregar apenas uma vez (no próximo arranque).
O valor típico especificado é 0x03 (ligado | Bootload).

Suplementos que implementam IDTExtensibility2 também devem especificar uma DWORD valor denominado "CommandLineSafe" para indicar se é seguros para operações que não suportam uma interface de utilizador. Um valor de 0 x 00 significa FALSO, 0 x 01 é verdadeiro.

Criar um suplemento COM

Pode criar um suplemento COM de três formas mencionadas abaixo:

Criar um suplemento utilizando o modelo de suplemento Com

Se tiver o Microsoft Office 2000 Developer ou Microsoft Office XP Developer e Visual Basic 6.0, a forma mais fácil para criar um suplemento é utilizar o modelo de in.vbp adicionar COM. Este projecto está localizado na subpasta ODETools\V9\Samples\OPG\Samples\CH11\VB_COM_AddIn no CD do Office 2000 Developer. Copie os ficheiros nesta pasta para a pasta Template\Projects do Visual Basic 6.0, que normalmente é C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects. Copiar o projecto de modelo para esta localização assegurará que o modelo aparece na caixa de diálogo novo projecto do Visual Basic 6.0. Consulte o capítulo 11 manual o Microsoft Office 2000 Visual Basic Programmer para mais informações sobre este modelo e criar suplementos COM do.

Criar um suplemento utilizando o Visual Basic 6 suplemento designer

Se tiver apenas o Microsoft Visual Basic 6.0 instalado e pretende utilizar um dispositivo de moldagem para que não seja necessário implementar directamente IDTExtensibility2, pode utilizar o mesmo suplementos designer que utilizaria para criar um siga adicionar In. VB6 estes passos para criar esse um suplemento para o Microsoft Excel 2000 ou 2002:
  1. Inicie o Microsoft Visual Basic 6.0 e seleccione o suplemento do como o tipo de projecto. Isto deve adicionar uma classe estruturador para o projecto (ligar) e um formulário (frmAddin).
  2. Abra a janela Designer para ligar e seleccione Microsoft Excel da lista pendente aplicações .
  3. Na lista pendente Comportamento de carregamento inicial , seleccione arranque .
  4. Remova frmAddin do projecto.
  5. A partir da janela Project , clique com o botão direito do rato no item de ligar e seleccione a Vista código .
  6. Remova todo o código na janela de código o estruturador. Este código funciona para suplementos VB mas não Office add-ins.
  7. Adicione o seguinte código ao 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. Guardar o projecto e criar MyAddin.dll . O estruturador registará o suplemento para si.
  9. Abrir o Microsoft Excel e irá notar uma caixa de mensagem quando o suplemento é carregado e descarregado. Na barra de ferramentas padrão, terá um novo botão com o nome Meu botão personalizado que os nossos add-in irá processar quando seleccionado.

Criar um suplemento utilizando implementa

Enquanto não está como simples, pode criar um suplemento COM utilizar o Microsoft Visual Basic 5.0 e a palavra-chave Implements para directamente implementa a interface IDTExtensibility2. A desvantagem apenas para esta abordagem é o registo. Uma vez que o Microsoft Visual Basic não sabe como adicionar chaves necessárias para registar o suplemento com o Office, terá de fazê-lo separadamente (num utilitário de configuração personalizado ou utilizar um script REG).

No entanto, a vantagem de utilizar Implements é que está mais directa e eficaz do que utilizar o designer e permite-na criar um objecto COM único pode trabalhar em várias aplicações do Office (em vez de criar um objecto de ligar separado para cada aplicação que pretende trabalhar).

Eis os passos para escrever um adicionar - in utilizando Implements:
  1. Abra o Visual Basic e crie um novo projecto de DLL de ActiveX. Nome do projecto MyCOMAddin e nome público classe ligar .
  2. A partir da caixa de diálogo referências (Project | referências), adicione uma referência para a biblioteca de objectos do Microsoft Office 9.0 (ou 10.0 para o Office XP) e a biblioteca de tipos Microsoft suplementos Designer. Se não é possível encontrar o Designer do suplemento na lista de referências, deve procurar Msaddndr.dll ou Msaddndr.tlb, normalmente localizado na pasta "C:\Program Files\Common Files\Designer".
  3. Na janela de código para ligar, 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. Guardar o projecto e criar MyCOMAddin.dll . No entanto, antes do suplemento funcionar terá de associar cada aplicação do Office que pretende executar no. No mundo real, um utilitário de configuração pode fazer isso quando a DLL é instalada. Neste exemplo, irá chamar uma função de registo directamente a partir do IDE do Visual Basic.
  5. Adicione um novo módulo ao projecto. 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. A partir da janela Immediate (ver | Immediate Window), escreva RegisterAll e, em seguida, prima ENTER. Esta registará o suplemento com todas as as aplicações do Office suportadas (Access, Excel, FrontPage, Outlook, PowerPoint e Word).
  7. Abrir qualquer uma das aplicações Office listados antes. Repare na caixa mensagem no arranque e encerramento e o botão personalizado à barra de ferramentas padrão.
  8. Quando pretender anular o registo do suplemento, escreva UnregisterAll na janela Immediate do Visual Basic e, em seguida, prima ENTER.

Referências

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

Para obter mais informações sobre como escrever suplementos, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
230689EXEMPLO: Comaddin.exe Office 2000 suplemento escrito no Visual C++
190253Os programadores do VB6 não funcionam no VB5
Para mais informações sobre como desenvolver soluções baseadas na Web para o Microsoft Internet Explorer, visite o seguinte Web site da Microsoft:
http://msdn.microsoft.com/ie/
Nota Quando adiciona um item de menu para o Office Word a partir do Visual Basic COM adicionar-in utilizando os passos listados neste artigo ou utilizando um método semelhante, o item de menu não funciona conforme esperado. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
313948O Word perde referência aos itens de menu COM objecto (CommandBarControl)

Propriedades

Artigo: 238228 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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