寻求MS Word C++插件事件DispIDs查询渠道
获取Word COM事件DispIDs的实用方案
直接查Office生成的头文件
装了Office开发工具包后,去本地路径里找MSWORD.h和MSWORD_i.c(比如C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Office\Office16这类位置),搜DocumentEvents、Open这些关键词,直接就能看到预定义的DispID常量:
- DocumentEvents的Open事件对应
DISPID_DOCUMENTEVENTS_OPEN - Close是
DISPID_DOCUMENTEVENTS_CLOSE - New是
DISPID_DOCUMENTEVENTS_NEW
这些是Office类型库直接生成的,准确性拉满。
代码里动态获取DispID
用IDispatch的GetIDsOfNames方法在运行时查询,示例代码:
// 假设pDocEvents是你拿到的DocumentEvents的IDispatch指针 OLECHAR* eventNames[] = {L"Open"}; DISPID dispid; HRESULT hr = pDocEvents->GetIDsOfNames(IID_NULL, eventNames, 1, LOCALE_USER_DEFAULT, &dispid); if (SUCCEEDED(hr)) { // 这里的dispid就是Open事件的DispID }
不用依赖头文件,直接在代码里验证,适合快速确认。
查官方文档的类型库参考
微软官方文档里列了Word对象模型事件的DispID,搜“Word DocumentEvents DispID”就能找到对应条目。核心几个事件的DispID通常是:
- Open: 0x00000614
- Close: 0x00000615
- New: 0x00000616
注意不同Office版本可能有小差异,最好结合本地头文件核对。
解决OleView找不到的问题
大概率是没加载对类型库:打开OleView,在“Type Libraries”里找Microsoft Word xx.x Object Library(xx.x是你的Office版本,比如16.0),展开后找_DocumentEvents接口,里面全是事件的DispID。要是还找不到,重新注册下Word的类型库,命令行运行:
regsvr32.exe "C:\Program Files\Microsoft Office\root\Office16\MSWORD.OLB"
内容的提问来源于stack exchange,提问作者Tom Lee
相关产品推荐
相关产品推荐

