テキストサービスフレームワークで作業中にXP Professionalシステムに問題が発生しました。私はITfThreadMgrからITfThreadMgrExインターフェイスを取得したいと思います。 Microsoftによると、ITfThreadMgr.QueryInterface()はITfThreadMgrExを取得するために使用されます。これをC++で試したところ、E_NOINTERFACEが返されました。 Microsoftによると、ITfThreadMgrExはWindows 2000 TSF 1.0で利用可能です。だから私は当然それがXP Professionalで利用できると仮定した。私のXPプロフェッショナルシステムでITfThreadMgrExを取得できません
また、私はこのプログラムを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);
UPDATE: 私は極東の言語をインストールし、言語バー(コントロールパネルの地域と言語)に中国(PRC)を追加すると、私はITfThreadMgrインターフェイスを取得することができます。 CoCreateInstance()とTF_CreateThreadMgr()を使用してこのインターフェイスを取得できます。
しかし、TIPのUIコンポーネントのカスタマイズに直接関係するITfThreadMgrからのQIのインターフェイスは使用できません。私はITfClientIdやITfMessagePumpのようなITfThreadMgr.QueryInterfaceから他のインターフェースを得ることができますが、ITfuiElementMgrやITfThreadMgrExは取得できません。
TIP UIをカスタム描画する機能は、インストールされていないか、または有効になっていません。しかし、それが正しい方向であるかどうかはわかりません。