文章編號: 238975 - 上次校閱: 2005年8月18日 - 版次: 3.4

如何附加至執行 Office 應用程式的執行個體

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

若要自動化 Office 應用程式的已在執行中,您可以使用 GetActiveObject() API 函數,以取得 IDispatch 指標所執行的執行個體。一旦執行執行個體這個 IDispatch 指標您可以使用方法和執行的執行個體的屬性。

其他相關資訊

自動化伺服器註冊的方式在 [執行物件表格 (ROT) 透過 RegisterActiveObject() API。自動化用戶端可以附加至執行的執行個體與程式碼如下所示:
      ::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();
				
注意: 如果個同時執行的自動化伺服器的多個執行個體 GetActiveObject() API 函數會傳回 IDispatch 指標到第一次執行該執行個體。

理論上,重複為每個個別的執行個體 ROT 但 Office 應用程式不註冊本身如果另一個執行個體已經在 ROT 由於 Moniker 為本身永遠相同,且無法辨別。這表示您無法貼附至第一個以外的任何執行個體。不過,因為 Office 應用程式也會註冊他們的文件中 ROT,您可以將成功地附加到其他執行個體來反覆查看 [ROT 尋找特定的文件、 將附加到此文件和再從這份文件取得應用程式物件。如反覆查看 ROT 和尋找文件名稱的需程式碼] 範例按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
190985? (http://support.microsoft.com/kb/190985/ ) 如何從一個 OCX 取得 IDispatch Excel 或 Word 文件
請注意因為那些應用程式可以有執行在指定時間只能有一個執行個體並非所需的單一執行個體應用程式本解決方案。PowerPoint 會是單一執行個體應用程式的範例。

這篇文章中的資訊適用於:
  • 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
關鍵字:?
kbmt kbfaq kbhowto KB238975 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:238975? (http://support.microsoft.com/kb/238975/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。