VISTA 与输入法程式介面
VISTA 与输入法程式介面
|
public void GetLanguages()
{
(在InputLanguage.InstalledInputLanguages中的InputLanguage lang)
{
textBox1.Text + = lang.Culture.EnglishName +'\ n';
}
}
|
|
///////////////////////////////////////////////////////////////////////////////////////////////
// Microsoft文本服务框架声明
//从C ++头文件
//
//////////////////////////////////////////////////////////////////////////////////////////////
使用系统;
使用System.ComponentModel;
使用System.Collections.Generic;
使用System.Text;
使用System.Runtime.InteropServices;
使用System.Security;
命名空间TSF
{
[ StructLayout(LayoutKind .Sequential)]
内部 结构 TF_LANGUAGEEPROFILE
{
内部 Guid clsid;
内部 短 LANGID;
内部 Guid catid;
[ MarshalAs(UnmanagedType .Bool)]
内部 布尔功能;
内部 Guid guidProfile;
}
[ ComImport,SecurityCritical,SuppressUnmanagedCodeSecurity,
Guid (“1F02B6C5-7842-4EE6-8A0B-9A24183A95CA”),
InterfaceType(ComInterfaceType .InterfaceIsIUnknown)]
内部 接口 ITfInputProcessorProfiles
{
[ SecurityCritical ]
void Register(); //非执行!可能是错误的声明。
[ SecurityCritical ]
void Unregister(); //非执行!可能是错误的声明。
[ SecurityCritical ]
void AddLanguageProfile(); //非执行!可能是错误的声明。
[ SecurityCritical ]
void RemoveLanguageProfile(); //非执行!可能是错误的声明。
[ SecurityCritical ]
void EnumInputProcessorInfo(); //非执行!可能是错误的声明。
[ SecurityCritical ]
int GetDefaultLanguageProfile(short langid,ref Guid catid,out Guid clsid,out Guid profile);
[ SecurityCritical ]
void SetDefaultLanguageProfile(); //非执行!可能是错误的声明。
[ SecurityCritical ]
int ActivateLanguageProfile(ref Guid clsid,short langid,ref Guid guidProfile);
[ PreserveSig,SecurityCritical ]
int GetActiveLanguageProfile(ref Guid clsid,out short langid,out Guid profile);
[ SecurityCritical ]
int GetLanguageProfileDescription(ref Guid clsid,short langid,ref Guid profile,out IntPtrdesc);
[ SecurityCritical ]
void GetCurrentLanguage(out short langid); //非执行!可能是错误的声明。
[ PreserveSig,SecurityCritical ]
int ChangeCurrentLanguage(short langid); //非执行!可能是错误的声明。
[ PreserveSig,SecurityCritical ]
int GetLanguageList (out IntPtr langids,out int count);
[ SecurityCritical ]
int EnumLanguageProfiles(short langid,out IEnumTfLanguageProfiles enumIPP);
[ SecurityCritical ]
int EnableLanguageProfile();
[ SecurityCritical ]
int IsEnabledLanguageProfile(ref guid clsid,short langid,ref Guid profile,out bool enabled);
[ SecurityCritical ]
void EnableLanguageProfileByDefault(); //非执行!可能是错误的声明。
[ SecurityCritical ]
void SubstituteKeyboardLayout(); //非执行!可能是错误的声明。
}
[ ComImport,InterfaceType(ComInterfaceType .InterfaceIsIUnknown),
Guid(“3d61bf11-ac5f-42c8-a4cb-931bcc28c744”)]
内部 接口 IEnumTfLanguageProfiles
{
无效克隆(输出 IEnumTfLanguageProfiles enumIPP);
[ PreserveSig ]
int Next(int count,[ Out,MarshalAs(UnmanagedType .LPArray,SizeParamIndex = 2)]
TF_LANGUAGEPROFILE [] profiles,out int fetched);
无效重置();
无效跳过(int count);
}
内部 静态 类 TSF_NativeAPI
{
公共 静态 只读 guid GUID_TFCAT_TIP_KEYBOARD;
静态 TSF_NativeAPI()
{
GUID_TFCAT_TIP_KEYBOARD = 新的 Guid(0x34745c63,0xb2f0,
0x4784,0x8b,0x67,0x5e,0x12,200x,0x1a,0x31);
}
[ SecurityCritical,SuppressUnmanagedCodeSecurity,DllImport(“msctf.dll”)]
public static extern int TF_CreateInputProcessorProfiles(out ITfInputProcessorProfiles profiles);
}
}
|
|
public static short [] GetLangIDs()
{
List < short > langIDs = new List < short >();
ITfInputProcessorProfiles配置文件;
如果(TSF_NativeAPI .TF_CreateInputProcessorProfiles(out profiles)== 0)
{
IntPtr langPtrs;
int fetchCount = 0;
if(profiles.GetLanguageList(out langPtrs,out fetchCount)== 0)
{
for(int i = 0; i <fetchCount; i ++)
{
short id = Marshal .ReadInt16(langPtrs,sizeof(short)* i);
langIDs.Add(ID);
}
}
Marshal .ReleaseComObject(profiles);
}
返回 langIDs.ToArray();
}
public static string [] GetInputMethodList(short langID)
{
List < string > imeList = new List < string >();
ITfInputProcessorProfiles配置文件;
如果(TSF_NativeAPI .TF_CreateInputProcessorProfiles(out profiles)== 0)
{
尝试
{
IEnumTfLanguageProfiles enumerator = null ;
if(profiles.EnumLanguageProfiles(langID,out enumerator)== 0)
{
if(enumerator!= null)
{
TF_LANGUAGEPROFILE [] langProfile = new TF_LANGUAGEPROFILE [1];
int fetchCount = 0;
while(enumerator.Next(1,langProfile,out fetchCount)== 0)
{
IntPtr ptr;
if(profiles.GetLanguageProfileDescription(ref langProfile [0] .clsid,
langProfile [0] .langid,ref langProfile [0] .guidProfile,out ptr)== 0)
{
布尔启用;
if(profiles.IsEnabledLanguageProfile(ref langProfile [0] .clsid,
langProfile [0] .langid,ref langProfile [0] .guidProfile,out enabled)== 0)
{
如果(启用)
imeList.Add(Marshal .PtrToStringBSTR(ptr));
}
}
Marshal.FreeBSTR(ptr);
}
}
}
}
最后
{
Marshal .ReleaseComObject(profiles);
}
}
return imeList.ToArray();
}
|
|
私人短 [] langIDs;
………
private void button1_Click(object sender,EventArgs e)
{
langIDs = TSFWrapper .GetLangIDs();
如果(langIDs.Length> 0)
{
string [] list = TSFWrapper .GetInputMethodList(langIDs [0]);
的foreach(字符串递减的列表)
listBox1.Items.Add(降序);
}
}
|

|
public static bool ActiveInputMethodWithDesc(short langID,string desc)
{
ITfInputProcessorProfiles配置文件;
如果(TSF_NativeAPI .TF_CreateInputProcessorProfiles(out profiles)== 0)
{
尝试
{
IEnumTfLanguageProfiles enumerator = null ;
if(profiles.EnumLanguageProfiles(langID,out enumerator)== 0)
{
if(enumerator!= null)
{
TF_LANGUAGEPROFILE [] langProfile = new TF_LANGUAGEPROFILE [1];
int fetchCount = 0;
while(enumerator.Next(1,langProfile,out fetchCount)== 0)
{
IntPtr ptr;
if(profiles.GetLanguageProfileDescription(ref langProfile [0] .clsid,
langProfile [0] .langid,ref langProfile [0] .guidProfile,out ptr)== 0)
{
布尔启用;
if(profiles.IsEnabledLanguageProfile(ref langProfile [0] .clsid,
langProfile [0] .langid,ref langProfile [0] .guidProfile,out enabled)== 0)
{
如果(启用)
{
string s = Marshal .PtrToStringBSTR(ptr);
if(s.Equals(desc))
返回 profiles.ActivateLanguageProfile(参考 langProfile [0] .clsid,
langProfile [0] .langid,ref langProfile [0] .guidProfile)== 0;
}
}
Marshal.FreeBSTR(ptr);
}
}
}
}
}
最后
{
Marshal .ReleaseComObject(profiles);
}
}
返回 false ;
}
|
|
private void button2_Click(object sender,EventArgs e)
{
如果(langIDs!= null)
{
if(listBox1.SelectedIndex!= -1)
TSFWrapper .ActiveInputMethodWithDesc(langIDs [0],(string)listBox1.SelectedItem);
}
}
|
|
public static bool DeActiveInputMethod(short langID)
{
List < string > imeList = new List < string >();
ITfInputProcessorProfiles配置文件;
如果(TSF_NativeAPI .TF_CreateInputProcessorProfiles(out profiles)== 0)
{
尝试
{
Guid clsid = Guid .Empty;
返回 profiles.ActivateLanguageProfile(ref clsid,langID,ref clsid)== 0;
}
最后
{
Marshal .ReleaseComObject(profiles);
}
}
返回 false ;
}
|
VISTA 与输入法程式介面的更多相关文章
- C# TSF 输入法的获取
原文 C# TSF 输入法的获取 起因: 「添雨跟打器」中存在一个问题.在 windows 8/10 里面,输入法就获取不到了.我一直没有去管这样的问题.但是也大致知道,可能是 TSF 架构的问题. ...
- Backbone.js
Backbone.js是一套JavaScript框架與RESTful JSON的應用程式介面.也是一套大致上符合MVC架構的編程範型.Backbone.js以輕量為特色,只需依賴一套Javascrip ...
- LINUX诞生
编辑 Linux[1] 是一类Unix计算机操作系统的统称.Linux操作系统也是自由软件和开放源代码发展中最著名的例子.在1991 年的十月,由一个名为 Linus Torvalds的年轻芬兰大学 ...
- facebook api介绍
转自(http://sls.weco.net/node/10773) 一.Facebook API 基礎概念 Facebook API 概論 : API 最大的好處在於可以讓程式開發人員只需要根據 A ...
- PAM 認 證 模 組
作者:陳柏菁 E-mail 作用:限制哪些用户或者组可以从哪里登陆,或者可以建立/etc/nologin立即阻止一般用户登陆,限制 user可以使用的资源.例如cpu,文件,登陆数量,某些服务的登陆时 ...
- socket 中午吃的啥 socket 并发服务器 fork
http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html zh.wikipedia.org/wiki/網路插座 在作業系統中,通 ...
- 修改 /var/lib/locales/supported.d/local 文件(使用 locale -a 命令查看系统中所有已配置的 locale)
转自:http://zyxhome.org/wp/cc-prog-lang/c-stdlib-setlocale-usage-note/ http://www.west263.com/info/htm ...
- OpenCV之响应鼠标(二):函数cvSetMouseCallback()和其副程式onMouse()的使用(OpenCV2.4.5)
每當滑鼠在視訊視窗介面點擊一下的時候,都會有固定三個動作 1.點擊(Click) 2.放開(Down)3.滑動(move) 因此,程式執行滑鼠在點擊的時候onMouse()都會連續跑三次,代表滑鼠在點 ...
- Android InputMethodManager输入法简介
正文 一.结构 public final class InputMethodManager extends Object Java.lang.Object android.view.inputmeth ...
随机推荐
- Android 基于Bmob平台数据管理常用方法整理
最近想搞一下基于Bmob平台的应用开发,发现确实挺方便的,很好的解决了服务器后台部署的难题, 但是也有一些弊端,数据架构的可扩展性不强,做一些数据结构简单的应用还是可以的. package com.b ...
- 微信开发之八 页面获取周围beacon设备
原文链接:https://blog.csdn.net/qq_37936542/article/details/78912197 --注意:微信测试号不具备这个功能 步骤一:绑定域名 注意不要加ht ...
- asp.net中,<%#%>,<%=%>和<%%>各自是什么意思,有什么差别
在asp.net中经常出现包括这样的形式<%%>的html代码,总的来说包括以下这样几种格式: 一. <%%> 这样的格式实际上就是和asp的使用方法一样的,仅仅是asp中里面 ...
- 基于GTID多源复制扩展
对一个运行很久的库做备份恢复建同步 不能使用xtrabackup 使用mysqldump导数据: mysqldump -S /data/mysql/3307/tmp/3307.sock --sin ...
- 【hdu 3863】No Gambling
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65568/32768 K (Java/Others) Total Submission(s) ...
- 新技能 get —— 使用 python 生成词云
什么是词云(word cloud)呢?词云又叫文字云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据 ...
- 数组replaceObjectAtIndex
执行replaceObjectAtIndex方法前提是_temp_Array必须是可变数组 [_temp_Array replaceObjectAtIndex:2 withObject:tempDat ...
- cellForRowAtIndexPath 设置图片
#import "UIImageView+MJWebCache.h" #import "MJPhotoBrowser.h" #import "MJPh ...
- Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理)
Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理) 本篇博客介绍Cocos2d-x的动作管理样例,这个样例展示了Cocos2d-x的几个动作: MoveTo ...
- Delphi 中的字符串(还解释了shortstring)good
一.Delphi 2009 之前的字符串(不支持 Unicode): Delphi 2009 之前的字符串分为 3 种:ShortString.AnsiString.WideString. [Shor ...