Artigo: 238975 - Última revisão: quinta-feira, 18 de Agosto de 2005 - Revisão: 3.4

Como anexar uma instância de execução de uma aplicação do Office

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sumário

Para automatizar a aplicação do Office que já está em execução, pode utilizar a função GetActiveObject() API para obter o ponteiro de IDispatch para a instância em execução. Depois deste ponteiro IDispatch para a instância em execução, pode utilizar os métodos e as propriedades da instância em execução.

Mais Informação

Servidores de automatização registem no executar objecto tabela (ROT) através de RegisterActiveObject() API. Os clientes de automatização podem ligar a uma instância em execução com código tal como:
      ::CoInitialize(NULL);

      // Translate server ProgID into a CLSID. ClsidFromProgID
      // gets this information from the registry.
      CLSID clsid;
      CLSIDFromProgID(L"Excel.Application", &clsid);  

      // Get an interface to the running instance, if any..
      IUnknown *pUnk;
      HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
      ASSERT(!FAILED(hr));

      // Get IDispatch interface for Automation...
      IDispatch *pDisp;
      hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
      ASSERT(!FAILED(hr));

      // Release the no-longer-needed IUnknown...
      pUnk->Release();

     // ----------------------------------------------------
     // Your automation code here-
     // ----------------------------------------------------

     ::CoUnintialize();
				
Nota : Se existirem várias instâncias de um servidor de automatização com ao mesmo tempo, a função de GetActiveObject() API devolve o ponteiro de IDispatch à instância que estava em execução pela primeira vez.

Teoricamente, pode efectuar iterações ROT para cada instância individual mas, aplicações do Office não se registem se outra instância estiver no ROT uma vez que o moniker próprio é sempre o mesmo e não pode ser distintos. Isto significa que não é possível anexar a todas as ocorrências, excepto para o primeiro. No entanto, uma vez que as aplicações do Office também registar os documentos a ROT, é possível com êxito anexar a outras instâncias por iteração as ROT à procura de um documento específico, anexar a este documento e, em seguida, obter o objeto Application deste documento. Por exemplo um código de iteração o ROT e procurar um nome de um documento, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
190985  (http://support.microsoft.com/kb/190985/ ) Como obter IDispatch de um documento do Word ou de Excel a partir de um OCX
Note que esta solução não é necessária para aplicações de ocorrência única uma vez que essas aplicações podem ter apenas uma instância em execução num determinado momento. O PowerPoint é um exemplo de uma aplicação de ocorrência única.

A informação contida neste artigo aplica-se a:
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Outlook 98 Standard Edition
  • Microsoft Office 97 Standard Edition
  • Microsoft Office 95 Standard Edition
  • Microsoft Office 95a
  • Microsoft Office 95b
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbmt kbfaq kbhowto KB238975 KbMtpt
Tradução automáticaTraduçã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: 238975  (http://support.microsoft.com/kb/238975/en-us/ )