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;
}
我用它来自动处理类似于中的单词
但现在我需要使用interfaceIOleCommandTarget::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);