TSF输入法注册种类和卸载种类

TSF注册种类不够,会造成win8以上系统或其部分程序切换不了,输入法图标不正常,部分特别的程序码不了字.

先看一下种类的注册的GUID值:

整理的如下:

1 GUID_TFCAT_CATEGORY_OF_TIP=={534C48C1-0607-4098-A521-4FC899C73E90}
2 GUID_TFCAT_TIP_KEYBOARD=={34745C63-B2F0-4784-8B67-5E12C8701A31}
3 GUID_TFCAT_TIP_SPEECH=={B5A73CD1-8355-426B-A161-259808F26B14}
4 GUID_TFCAT_TIP_HANDWRITING=={246ECB87-C2F2-4ABE-905B-C8B38ADD2C43}
5 GUID_TFCAT_TIPCAP_SECUREMODE=={49D2F9CE-1F5E-11D7-A6D3-00065B84435C}
6 GUID_TFCAT_TIPCAP_UIELEMENTENABLED=={49D2F9CF-1F5E-11D7-A6D3-00065B84435C}
7 GUID_TFCAT_TIPCAP_INPUTMODECOMPARTMENT=={CCF05DD7-4A87-11D7-A6E2-00065B84435C}
7 GUID_TFCAT_TIPCAP_COMLESS=={364215D9-75BC-11D7-A6EF-00065B84435C}
8 GUID_TFCAT_TIPCAP_WOW16=={364215DA-75BC-11D7-A6EF-00065B84435C}
9 GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT=={13A016DF-560B-46CD-947A-4C3AF1E0E35D}
10 GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT=={25504FB4-7BAB-4BC1-9C69-CF81890F0EF5}
11 GUID_TFCAT_PROP_AUDIODATA=={9B7BE3A9-E8AB-4D47-A8FE-254FA423436D}
12 GUID_TFCAT_PROP_INKDATA=={7C6A82AE-B0D7-4F14-A745-14F28B009D61}
13 GUID_TFCAT_PROPSTYLE_CUSTOM=={24AF3031-852D-40A2-BC09-8992898CE722}
GUID_TFCAT_PROP_AUDIODATA=={9B7BE3A9-E8AB-4D47-A8FE-254FA423436D}
14 GUID_TFCAT_PROPSTYLE_STATIC=={565FB8D8-6BD4-4CA1-B223-0F2CCB8F4F96}
15 GUID_TFCAT_PROPSTYLE_STATICCOMPACT=={85F9794B-4D19-40D8-8864-4E747371A66D}
16 GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER=={046B8C80-1647-40F7-9B21-B93B81AABC1B}
17 GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY=={B95F181B-EA4C-4AF1-8056-7C321ABBB091}

整理的源码如下:

#include <iostream>
#include<string>

#include<msctf.h>
//要支持的种类
const GUID SupportCategories0[] =
{
     GUID_TFCAT_CATEGORY_OF_TIP,
     GUID_TFCAT_TIP_KEYBOARD,
     GUID_TFCAT_TIP_SPEECH,
     GUID_TFCAT_TIP_HANDWRITING,
      GUID_TFCAT_TIPCAP_SECUREMODE,
      GUID_TFCAT_TIPCAP_UIELEMENTENABLED,
      GUID_TFCAT_TIPCAP_INPUTMODECOMPARTMENT,
      GUID_TFCAT_TIPCAP_COMLESS,
      GUID_TFCAT_TIPCAP_WOW16,
      GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT,
      GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT,
      GUID_TFCAT_PROP_AUDIODATA,
      GUID_TFCAT_PROP_INKDATA,
      GUID_TFCAT_PROPSTYLE_CUSTOM,
      GUID_TFCAT_PROPSTYLE_STATIC,
      GUID_TFCAT_PROPSTYLE_STATICCOMPACT,
      GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER,
      GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY
};

static BOOL CLSIDToStringA(REFGUID refGUID, char* pchA)
{
    static const BYTE GuidMap[] = { 3, 2, 1, 0, '-', 5, 4, '-', 7, 6, '-',
        8, 9, '-', 10, 11, 12, 13, 14, 15 };

    static const char szDigits[] = "0123456789ABCDEF";

    int i;
    char* p = pchA;

    const BYTE* pBytes = (const BYTE*)&refGUID;

    *p++ = '{';
    for (i = 0; i < sizeof(GuidMap); i++)
    {
        if (GuidMap[i] == '-')
            *p++ = '-';
        else
        {
            *p++ = szDigits[(pBytes[GuidMap[i]] & 0xF0) >> 4];
            *p++ = szDigits[(pBytes[GuidMap[i]] & 0x0F)];
        }
    }
    *p++ = '}';
    *p = '\0';
    return TRUE;
}


int main()
{
    char c[100] = { 0 };
    GUID guid;

    guid = GUID_TFCAT_CATEGORY_OF_TIP;
    CLSIDToStringA(guid, c);
    std::cout << "1 GUID_TFCAT_CATEGORY_OF_TIP==" << c << "\n";

    guid = GUID_TFCAT_TIP_KEYBOARD;
    CLSIDToStringA(guid, c);
    std::cout << "2 GUID_TFCAT_TIP_KEYBOARD==" << c << "\n";

    guid = GUID_TFCAT_TIP_SPEECH;
    CLSIDToStringA(guid, c);
    std::cout << "3 GUID_TFCAT_TIP_SPEECH==" << c << "\n";

    guid = GUID_TFCAT_TIP_HANDWRITING;
     CLSIDToStringA(guid, c);
    std::cout << "4 GUID_TFCAT_TIP_HANDWRITING==" << c << "\n";

    guid = GUID_TFCAT_TIPCAP_SECUREMODE;
    CLSIDToStringA(guid, c);
    std::cout << "5 GUID_TFCAT_TIPCAP_SECUREMODE==" << c << "\n";

    guid = GUID_TFCAT_TIPCAP_UIELEMENTENABLED;
    CLSIDToStringA(guid, c);
    std::cout << "6 GUID_TFCAT_TIPCAP_UIELEMENTENABLED==" << c << "\n";

    guid = GUID_TFCAT_TIPCAP_INPUTMODECOMPARTMENT;
    CLSIDToStringA(guid, c);
    std::cout << "7 GUID_TFCAT_TIPCAP_INPUTMODECOMPARTMENT==" << c << "\n";

    guid = GUID_TFCAT_TIPCAP_COMLESS;
    CLSIDToStringA(guid, c);
    std::cout << "7 GUID_TFCAT_TIPCAP_COMLESS==" << c << "\n";

    guid = GUID_TFCAT_TIPCAP_WOW16;
    CLSIDToStringA(guid, c);
    std::cout << "8 GUID_TFCAT_TIPCAP_WOW16==" << c << "\n";

    guid = GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT;
    CLSIDToStringA(guid, c);
    std::cout << "9 GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT==" << c << "\n";

    guid = GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT;
    CLSIDToStringA(guid, c);
    std::cout << "10 GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT==" << c << "\n";

    guid = GUID_TFCAT_PROP_AUDIODATA;
    CLSIDToStringA(guid, c);
    std::cout << "11 GUID_TFCAT_PROP_AUDIODATA==" << c << "\n";

    guid = GUID_TFCAT_PROP_INKDATA;
    CLSIDToStringA(guid, c);
    std::cout << "12 GUID_TFCAT_PROP_INKDATA==" << c << "\n";

    guid = GUID_TFCAT_PROPSTYLE_CUSTOM;
    CLSIDToStringA(guid, c);
    std::cout << "13 GUID_TFCAT_PROPSTYLE_CUSTOM==" << c << "\n";

    guid = GUID_TFCAT_PROP_AUDIODATA;
    CLSIDToStringA(guid, c);
    std::cout << "GUID_TFCAT_PROP_AUDIODATA==" << c << "\n";

    guid = GUID_TFCAT_PROPSTYLE_STATIC;
    CLSIDToStringA(guid, c);
    std::cout << "14 GUID_TFCAT_PROPSTYLE_STATIC==" << c << "\n";

    guid = GUID_TFCAT_PROPSTYLE_STATICCOMPACT;
    CLSIDToStringA(guid, c);
    std::cout << "15 GUID_TFCAT_PROPSTYLE_STATICCOMPACT==" << c << "\n";

    guid = GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER;
    CLSIDToStringA(guid, c);
    std::cout << "16 GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER==" << c << "\n";

    guid = GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY;
    CLSIDToStringA(guid, c);
    std::cout << "17 GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY==" << c << "\n";

    std::cin.get();
    return 0;

} 

得出最上面结果的代码如下:

#include <iostream>
#include<string>

#include<msctf.h>
//要支持的种类
const GUID SupportCategories0[] =
{
     GUID_TFCAT_CATEGORY_OF_TIP,
     GUID_TFCAT_TIP_KEYBOARD,
     GUID_TFCAT_TIP_SPEECH,
     GUID_TFCAT_TIP_HANDWRITING,
      GUID_TFCAT_TIPCAP_SECUREMODE,
      GUID_TFCAT_TIPCAP_UIELEMENTENABLED,
      GUID_TFCAT_TIPCAP_INPUTMODECOMPARTMENT,
      GUID_TFCAT_TIPCAP_COMLESS,
      GUID_TFCAT_TIPCAP_WOW16,
      GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT,
      GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT,
      GUID_TFCAT_PROP_AUDIODATA,
      GUID_TFCAT_PROP_INKDATA,
      GUID_TFCAT_PROPSTYLE_CUSTOM,
      GUID_TFCAT_PROPSTYLE_STATIC,
      GUID_TFCAT_PROPSTYLE_STATICCOMPACT,
      GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER,
      GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY
};

static BOOL CLSIDToStringA(REFGUID refGUID, char* pchA)
{
    static const BYTE GuidMap[] = { 3, 2, 1, 0, '-', 5, 4, '-', 7, 6, '-',
        8, 9, '-', 10, 11, 12, 13, 14, 15 };

    static const char szDigits[] = "0123456789ABCDEF";

    int i;
    char* p = pchA;

    const BYTE* pBytes = (const BYTE*)&refGUID;

    *p++ = '{';
    for (i = 0; i < sizeof(GuidMap); i++)
    {
        if (GuidMap[i] == '-')
            *p++ = '-';
        else
        {
            *p++ = szDigits[(pBytes[GuidMap[i]] & 0xF0) >> 4];
            *p++ = szDigits[(pBytes[GuidMap[i]] & 0x0F)];
        }
    }
    *p++ = '}';
    *p = '\0';
    return TRUE;
}

int main()
{
    char c[100] = { 0 };
    for (GUID guid : SupportCategories0)
    {        
        CLSIDToStringA(guid, c);
        std::cout << c << "\n";
    }

    GUID guid;

    guid=GUID_TFCAT_CATEGORY_OF_TIP;
    CLSIDToStringA(guid, c);
    std::cout <<"GUID_TFCAT_CATEGORY_OF_TIP======="<< c << "\n";

    guid = GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY;
    CLSIDToStringA(guid, c);
    std::cout << "GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY=======" << c << "\n";

    std::cin.get();
    return 0;

}

tsf输入法注册种类在注册表产生注册项如下:

 tsf输入法中注册种类和卸载种类的C++代码如下:

//要支持的种类
const GUID SupportCategories0[] =
{    
     //GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER,
     //GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT,
     //GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT,
     //GUID_TFCAT_TIP_KEYBOARD,
     //GUID_TFCAT_TIPCAP_COMLESS,
     //GUID_TFCAT_TIPCAP_WOW16,
     //GUID_TFCAT_TIPCAP_SECUREMODE,
     //GUID_TFCAT_TIPCAP_UIELEMENTENABLED,
     //GUID_TFCAT_TIPCAP_INPUTMODECOMPARTMENT

      //GUID_TFCAT_TIP_SPEECH,
      //GUID_TFCAT_TIP_HANDWRITING,
      GUID_TFCAT_CATEGORY_OF_TIP,
      GUID_TFCAT_TIP_KEYBOARD,
      GUID_TFCAT_TIPCAP_SECUREMODE,
      GUID_TFCAT_TIPCAP_UIELEMENTENABLED,
      GUID_TFCAT_TIPCAP_INPUTMODECOMPARTMENT,
      GUID_TFCAT_TIPCAP_COMLESS,
      GUID_TFCAT_TIPCAP_WOW16,
      GUID_TFCAT_TIPCAP_IMMERSIVESUPPORT,
      GUID_TFCAT_TIPCAP_SYSTRAYSUPPORT,
      GUID_TFCAT_PROP_AUDIODATA,
      GUID_TFCAT_PROP_INKDATA,
      GUID_TFCAT_PROPSTYLE_CUSTOM,
      GUID_TFCAT_PROPSTYLE_STATIC,
      GUID_TFCAT_PROPSTYLE_STATICCOMPACT,
      GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER,
      GUID_TFCAT_DISPLAYATTRIBUTEPROPERTY
};


BOOL RegisterCategories()
{
    CComPtr<ITfCategoryMgr>pCategoryMgr;
    HRESULT hr;
    hr = pCategoryMgr.CoCreateInstance(CLSID_TF_CategoryMgr, NULL, CLSCTX_INPROC_SERVER);
    if (hr != S_OK)
        return FALSE;

    BOOL flag = TRUE;
    for(GUID guid : SupportCategories0)
    {
        hr = pCategoryMgr->RegisterCategory(c_clsidTextService, guid, c_clsidTextService);
        if (hr != S_OK)
            flag = FALSE;
    }
    return flag;
}

void UnregisterCategories()
{
    CComPtr<ITfCategoryMgr>pCategoryMgr;
    HRESULT hr;
    hr = pCategoryMgr.CoCreateInstance(CLSID_TF_CategoryMgr, NULL, CLSCTX_INPROC_SERVER);
    if (hr != S_OK)
        return;

    for (GUID guid : SupportCategories0)
        pCategoryMgr->UnregisterCategory(c_clsidTextService, guid, c_clsidTextService);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值