ID do artigo: 238975 - Última revisão: quinta-feira, 18 de agosto de 2005 - Revisão: 3.4

Como anexar a uma instância de execução de um aplicativo 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 | Recolher tudo

Sumário

Para automatizar um aplicativo do Office que já está executando o, você pode usar a função GetActiveObject() API para obter o ponteiro de IDispatch para a instância em execução. Depois de ter este ponteiro IDispatch para a instância em execução, você pode usar os métodos e propriedades da instância em execução.

Mais Informações

Servidores de automação se registram na execução ROT (tabela de objetos) por meio de RegisterActiveObject() API. Clientes de automação podem anexar a uma instância em execução com o código como o seguinte:
      ::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();
				
Observação : se houver várias instâncias de um servidor de automação que esteja executando ao mesmo tempo, a função GetActiveObject() API retorna o ponteiro IDispatch para a instância que foi executada pela primeira vez.

Teoricamente, você pode iterar ROT para cada instância individual, mas os aplicativos do Office não se registram se outra instância já estiver no ROT porque o moniker para si é sempre a mesma e não pode ser distinto. Isso significa que você não pode anexar a qualquer instância, exceto para o primeiro. No entanto, como aplicativos do Office também registrar seus documentos no ROT, você com êxito pode anexar a outras instâncias por iteração os ROT procurando um documento específico, anexar a este documento e obter o objeto Application deste documento. Para obter um exemplo de código de iteração a ROT e procurando por um nome de documento, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
190985  (http://support.microsoft.com/kb/190985/ ) Como obter o IDispatch de um documento de Word do Excel ou de um OCX
Observe que esta solução não é necessária para aplicativos single-instance como esses aplicativos podem ter apenas uma instância em execução em um determinado momento. PowerPoint é um exemplo de um aplicativo single-instance.

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 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: 238975  (http://support.microsoft.com/kb/238975/en-us/ )