138 个问题
您好 @YU Coat,
我也不能让ITfCompartment
禁止输入法。我觉得TSF(Text Service Framework)是有能力做到这一点的,或许你可以参考一下这个程序https://github.com/ryancheung/ImeSharp.
{
CoInitialize(NULL);
// An identifier of TSF client.
TfClientId client_id_ = TF_CLIENTID_NULL;
HRESULT hr;
ITfThreadMgr* thread_manager_;
hr = CoCreateInstance(CLSID_TF_ThreadMgr,
NULL,
CLSCTX_ALL,
IID_ITfThreadMgr,
(void**)&thread_manager_);
if (FAILED(thread_manager_->Activate(&client_id_))) {
return 1;
}
ITfDocumentMgr* document_manager;
if (FAILED(thread_manager_->CreateDocumentMgr(&document_manager))) {
return false;
}
DWORD edit_cookie = TF_INVALID_EDIT_COOKIE;
ITfContext* context;
if (FAILED((document_manager)
->CreateContext(client_id_, 0,
NULL,
&context, &edit_cookie))) {
return false;
}
if (FAILED((document_manager)->Push(context))) {
return false;
}
ITfCompartmentMgr* compartment_mgr;
if (FAILED(context->QueryInterface(IID_PPV_ARGS(&compartment_mgr)))) {
return false;
}
ITfCompartment* empty_context;
if (FAILED(compartment_mgr->GetCompartment(GUID_COMPARTMENT_EMPTYCONTEXT,
&empty_context))) {
return false;
}
VARIANT empty_context_variant{};
empty_context_variant.vt = VT_I4;
empty_context_variant.bVal = 1;
if (FAILED(
empty_context->SetValue(client_id_, &empty_context_variant))) {
return false;
}
ITfCompartment* disabled_compartment;
if (FAILED(compartment_mgr->GetCompartment(
GUID_COMPARTMENT_KEYBOARD_DISABLED,
&disabled_compartment))) {
return false;
}
VARIANT variant{};
variant.vt = VT_I4;
variant.bVal = 1;
if ((hr = (disabled_compartment->SetValue(client_id_, &variant))) != S_OK) {
return false;
}
}