在使用文本服务框架时,我遇到了 XP Professional 系统的问题。我想从 ITfThreadMgr 获取 ITfThreadMgrEx 接口。根据微软的说法,ITfThreadMgr.QueryInterface() 用于获取 ITfThreadMgrEx。当我在 C++ 中尝试这个时,我得到了 E_NOINTERFACE。据微软称,ITfThreadMgrEx 在 Windows 2000 TSF 1.0 上可用。所以我很自然地认为它会在 XP Professional 上可用。
另外,我在 Windows 7 上试过这个程序,没问题。然而,在安装了国际语言远东语言支持的两个不同的 Windows XP Professional SP3 上,两个系统上都存在同样的问题。
是否有足够熟悉 TSF 的人知道为什么我无法根据 Microsoft 的文档获取界面?关于我可以尝试什么的任何想法?
HRESULT hr = ::CoInitialize(NULL);
ITfThreadMgr * p = NULL;
ITfThreadMgrEx * pe = NULL;
hr = ::CoCreateInstance(CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC, IID_ITfThreadMgr, (void**)&p);
hr = p->QueryInterface(IID_ITfThreadMgrEx, (void**)&pe);
更新:安装远东语言并将中文(PRC)添加到语言栏(控制面板中的区域和语言)后,我可以获得 ITfThreadMgr 界面。我可以使用 CoCreateInstance() 和 TF_CreateThreadMgr() 来获得这个接口。
但由于某些原因,从 ITfThreadMgr 获得的与自定义 TIP 的 UI 组件直接相关的接口不可用。我可以从 ITfThreadMgr.QueryInterface 获取其他接口,例如 ITfClientId 和 ITfMessagePump,但我无法获取 ITfUIElementMgr 和 ITfThreadMgrEx。
就像自定义绘制 TIP UI 的功能一样,根本没有安装或启用。但我不确定这是否是正确的方向。