C++ c++;MS Word-OleAutomation

C++ c++;MS Word-OleAutomation,c++,ms-word,automation,office-interop,ole,C++,Ms Word,Automation,Office Interop,Ole,我正在创建IDispatch如下: IDispatch *m_pWApp = NULL; CoInitialize(NULL); CLSID clsid; m_hr = CLSIDFromProgID(L"Word.Application", &clsid); if(SUCCEEDED(m_hr)) { m_hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&m

我正在创建
IDispatch
如下:

IDispatch *m_pWApp = NULL;
CoInitialize(NULL);
CLSID clsid;
m_hr = CLSIDFromProgID(L"Word.Application", &clsid);
if(SUCCEEDED(m_hr))
{

    m_hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&m_pWApp);
    if(FAILED(m_hr)) m_pWApp=NULL;
}
我用它来自动处理类似于中的单词

但现在我需要使用interface
IOleCommandTarget::Exec中的方法来隐藏打开word的菜单栏。我知道用这种方法是可能的


我的问题是,如何让
IOleCommandTarget
使用它调用Exec,当然还有可能在示例中使用
IDispatch
行。

您的代码是正确的,只需添加:

LPOLECOMMANDTARGET lpOleCommandTarget = NULL;
lpDispatch->QueryInterface(IID_IOleCommandTarget, (void**)&lpOleCommandTarget);

然后
**lpOleCommandTarget->Exec(…)**

例如:

lpOleCommandTarget->Exec(NULL, OLECMDID_PRINT, 0, NULL,NULL);

这将返回E_NOINTERFACE。您需要为OLE对象的OleCommandTarget(QueryInterface的第一个参数)找到正确的IID。请看,我认为,我的问题是我将word作为“word.Application”打开。当我使用“Word.Document”时,我会得到IID_iolecommand target。但我需要将word作为word.Application打开。是另一种方法,我如何隐藏菜单栏或例如禁用菜单栏“文件”的特殊控制?我相信你可以隐藏菜单栏等,这将是一个不同的问题。用谷歌搜索一下,我相信你会找到方法的。您可能必须使用Spy++来定位类和窗口并隐藏它们。
lpOleCommandTarget->Exec(NULL, OLECMDID_PRINT, 0, NULL,NULL);