获取系统当前的输入法列表并通过编程方式切换输入法

1.获取输入法列表

//保存输入法信息的结构
    struct _tagInputMethod
    {
     char szLanguageId[30];
     char szLanguageName[100];
     char szLanguageImeFileName[100];
     HICON hIcon;
    };

_tagInputMethod m_InputMethodList[30];
    int m_InputMethodCount;

//获取输入法列表

HKEY hKey,hKey1;

DWORD cp=16;

char LanguageId[15];

CString szID;

CString szKeyName,szKeyName1;

szKeyName = "Keyboard Layout\\Preload";

szKeyName1 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\";

int i=0;

szID.Format("%d",i+1);

DWORD lpT=REG_SZ;

if(::RegOpenKey(HKEY_CURRENT_USER,szKeyName,&hKey)==ERROR_SUCCESS )

{

while(::RegQueryValueEx(hKey,szID,NULL,&lpT,(LPBYTE)LanguageId,&cp) == ERROR_SUCCESS )

{

CString szTempName;

szTempName = szKeyName1 + (LPCTSTR)(LPTSTR)LanguageId;

if(RegOpenKey(HKEY_LOCAL_MACHINE,szTempName,&hKey1)==ERROR_SUCCESS )

{

char szLanguageName[100];

memset(szLanguageName,0,100);

char szImeFileName[100];

memset(szImeFileName,0,100);

char szImeFileName_Layout[100];

memset(szImeFileName_Layout,0,100);

char Temp[100];

memset(Temp,0,100);

DWORD lpSLen=100;

if(RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)szLanguageName,&lpSLen)==ERROR_SUCCESS)

{

                    strcpy(m_InputMethodList[i].szLanguageId,LanguageId);

                    strcpy(m_InputMethodList[i].szLanguageName,szLanguageName);    

}

//ImeFileName

lpSLen=100;

RegQueryValueEx(hKey1,"IME file",NULL,&lpT,(LPBYTE)szImeFileName,&lpSLen);

if (strlen(szImeFileName)>0)

{

strcpy(Temp,szImeFileName);

}

else

{

lpSLen=100;

RegQueryValueEx(hKey1,"Layout File",NULL,&lpT,(LPBYTE)szImeFileName_Layout,&lpSLen);

if (strlen(szImeFileName_Layout)>0)

{

strcpy(Temp,szImeFileName_Layout);

}

}

                strcpy(m_InputMethodList[i].szLanguageImeFileName,Temp);

//从IME的文件里取出16*16图标

HICON hSmallImeIcon[1];

int _ImeIconCount=ExtractIconEx(Temp,0,NULL,hSmallImeIcon,1);

if (_ImeIconCount==0)

{

hSmallImeIcon[0]=LoadIcon(AfxGetApp()->m_hInstance,(LPCTSTR)IDI_UnKnowInputMethodIcon);

}

                m_InputMethodList[i].hIcon=hSmallImeIcon[0];

}

::RegCloseKey(hKey1);

i++;

szID.Format("%d",i+1);

m_InputMethodCount=i;

}

}

::RegCloseKey(hKey);

2.通过编程方式切换输入法

HKL hkl=LoadKeyboardLayout(szLanguageId,KLF_ACTIVATE);
     ::PostMessage(::GetForegroundWindow(),WM_INPUTLANGCHANGEREQUEST,TRUE,(LPARAM)hkl);

时间: 2025-01-14 11:50:08

获取系统当前的输入法列表并通过编程方式切换输入法的相关文章

AHK 获取系统已安装字体列表

AHK 调用API获取系统已安装字体列表代码: DllCall("gdi32\EnumFontFamilies","uint",DllCall("GetDC","uint",0),"uint",0,"uint",RegisterCallback("EnumFontFamilies"),"uint",a_FontList:="")

XE3随笔21:系统默认语言与系统支持的语言列表

unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type   TForm1 = class(TForm)     Memo1: TMemo;     Button1: TButton;     Button2: TButton;     Button3: TButton;     Button4:

获取系统中已经安装的文字输入法

//获取系统中已经安装的文字输入法 InputLanguageCollection MyInputs = InputLanguage.InstalledInputLanguages; //获取当前输入法信息 InputLanguage CurrentInput = InputLanguage.CurrentInputLanguage; string language = CurrentInput.LayoutName; IntPtr pt = new IntPtr(134481924); for

java 获取系统变量(环境变量和设置变量)

前言 环境变量这个概念不陌生, 就是操作系统的环境变量. 系统变量就是java本身维护的变量. 通过 System.getProperty 的方式获取. 对于不同的操作系统来说, 环境变量的处理可能会有一些不统一的地方, 比方说: 不区分大写和小写 等等. Java 获取环境变量 Java 获取环境变量的方式非常easy: System.getEnv()  得到全部的环境变量 System.getEnv(key) 得到某个环境变量的值 Map map = System.getenv(); Ite

IOS 获取系统版本字符串,并且转化成float类型

pcDuino3下支持mmc启动,官方的Uboot是采用SPL框架实现的,因为内部的SRAM空间达到32K,我们完全可以在这32K空间内编写一个完整可用小巧的bootloader来完成引导Linux kernel的目的. 我们首先介绍下SPL框架,可以先看下<GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法>和<GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析>,NAND_SPL也算是SPL框架下的一种模式. 当使用Nand f

iOS开发——运行时OC篇&amp;使用运行时获取系统的属性:使用自己的手势修改系统自带的手势

使用运行时获取系统的属性:使用自己的手势修改系统自带的手势 有的时候我需要实现一个功能,但是没有想到很好的方法或者想到了方法只是那个方法实现起来太麻烦,一或者确实为了装逼,我们就会想到iOS开发中最牛逼的技术运行时(Runtime) 关于运行时这里就不多说了,请查看笔者之前搬过来了精选文章,这里主要是怎么在实际开发中使用运行时实现我们想要的功能. 比如,在iOS开发中有这样一个问题,关于导航栏中我们点击一个按钮会跳到对应的子控制器,但是这里问题就来了,我们在对应的字控制器中可以点击对应的back

Delphi编程获取系统当前进程、窗口句柄、文件属性以(转)

Delphi编程获取系统当前进程.窗口句柄.文件属性以及程序运行状态. uses TLHelp32,PsAPI; (1)显示进程列表:procedure TForm1.Button2Click(Sender: TObject);var lppe: TProcessEntry32;found : boolean;Hand : THandle;P:DWORD;s:string;beginListBox1.Items.Clear ;Hand := CreateToolhelp32Snapshot(TH

iOS开发------获取系统联系人(AddressBook篇)

AddressBook是Apple提供给我们获取系统联系人的一个很方便类库,与其说方便,其实刚开始还是比较崩溃的,从开发文档来看,它还是偏向于C语言,并且不在ARC的控制之下,虽然在iOS9.0之后会被Contacts.framework替代,但在工作中要对最低版本进行兼容,了解一下这个类库还是很有必要的.这里就介绍一下获取联系人信息的那些方法,对于修改,添加删除等操作,想留在下一篇介绍AddressBookUI这个类库的时候来写一下. 代码GitHub:https://github.com/Y

Android实现获取应用程序相关信息列表的方法

本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性.大小和应用程序路径.应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程序,同时在获取到应用信息的时候,判断是不是系统的应用程序,这是一个应用管理器所必需具备的功能. 具体实现代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33