[Automation]Force word.exe process to quit by using VC++

本文介绍了一种使用VC++来终止未正常关闭的Word进程的方法。通过获取存在的Word.EXE实例并利用COM接口,可以确保即使在自动化会话结束后也能正确退出Word应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sometimes, Word.exe process Still Runs After Automation Session ,  it will be still avaliable in Task Mananger.

refer to : http://support.microsoft.com/kb/212675

We have to invoke wordApp.quit to quit the whole application.

The following method is from google search, using VC++ to get the existed WORD.EXE instance, to kill it used by the automation method. Of course, whereelse, you can get the WORD.EXE process directly, and call TerminateProcess.

AfxOleInit(); // it is very neccessary here. or ::CoInitialize(NULL)/CoUninitialize
CLSID   clsid;   
HRESULT   hr;   
hr
= ::CLSIDFromProgID(L " Word.Application " ,    & clsid);  // get the CLSID through ProgID
if (FAILED(hr))   
{   
  AfxMessageBox(_T(
"NO   OFFICE   INSTALLED!"));   
  
return;   
}
   
    
IUnknown   
* pUnknown = NULL;   
IDispatch   
* pDispatch = NULL;   
_Application   app
= NULL;   
    
hr
= ::GetActiveObject(clsid,NULL, & pUnknown);  // check whether the instance has existed 
if (FAILED(hr))   
{   
  
//AfxMessageBox(_T("No   running   WORD!"));   
  return;   
}
   
    
try    
{   
  hr
=pUnknown->QueryInterface(IID_IDispatch,   (LPVOID   *)&app);   
  
if(FAILED(hr))   
  
throw(_T("Failed   to   get   IDispatchPtr"));   
    
  pUnknown
->Release();   
  pUnknown
=NULL;   
}
   
catch (LPCTSTR   lpErr)   
{   
  AfxMessageBox(lpErr);   
}
   
    
if (pUnknown)   
  pUnknown
-> Release();   
    
CComVariant   SaveChanges(
false );  //    hint   save   or   not   
CComVariant   OriginalFormat,   RouteDocument;   
app.Quit(
& SaveChanges,    & OriginalFormat,    & RouteDocument);   
app.ReleaseDispatch();   
}  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值