Text Services Framework を使用しているときに、XP Professional システムで問題が発生しました。ITfThreadMgr から ITfThreadMgrEx インターフェイスを取得したいと考えています。Microsoft によると、ITfThreadMgr.QueryInterface() は ITfThreadMgrEx を取得するために使用されます。これを C++ で試したところ、E_NOINTERFACE が返されました。Microsoft によると、ITfThreadMgrEx は Windows 2000 TSF 1.0 で利用できます。したがって、当然、XP Professionalで利用できると思いました。
また、Windows 7 でこのプログラムを試してみましたが、問題ありません。しかし、国際言語極東言語サポートがインストールされた 2 つの異なる Windows XP Professional SP3 では、両方のシステムで同じ問題が発生します。
Microsoft のドキュメントによると、なぜ私がインターフェイスを取得できないのかを十分に知っている TSF に詳しい人はいますか? 私が試すことができるものについてのアイデアはありますか?
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() を使用して取得できます。
しかし、何らかの理由で、TIP の UI コンポーネントのカスタマイズに直接関連する ITfThreadMgr から QI されたインターフェイスは使用できません。ITfThreadMgr.QueryInterface から ITfClientId や ITfMessagePump などの他のインターフェイスを取得できますが、ITfUIElementMgr も ITfThreadMgrEx も取得できません。
TIP UI をカスタム描画する機能がインストールされていない、または有効になっていないようなものです。しかし、それが正しい方向であるかどうかは定かではありません。