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 ...
随机推荐
- 【24.91】【Tsinsen 1302】&【BZOJ 2626】JZPFAR
时间限制:5.0s 内存限制:256.0MB 总提交次数:547 AC次数:137 平均分:40.31 将本题分享到: 查看未格式化的试题 提交 试题讨论 试题来 ...
- AndroidStudio如何配置NDK/JNI开发环境
参考文章: http://www.th7.cn/Program/Android/201509/550864.shtml http://www.open-open.com/lib/view/open14 ...
- 不使用left-join等多表关联查询,只用单表查询和Java程序,简便实现“多表查询”效果
上次我们提到,不使用left-loin关联查询,可能是为了提高效率或者配置缓存,也可以简化一下sql语句的编写.只写单表查询,sql真得太简单了.问题是,查询多个表的数据还是非常需要的. 因此,存在这 ...
- 【a703】求逆序对(线段树的解法)
Time Limit: 10 second Memory Limit: 2 MB 问题描述 给定一个序列a1,a2...an.如果存在i小于j 并且ai大于aj,那么我们称之为逆序对,求给定序列中逆序 ...
- js 进阶 10 js选择器大全
js 进阶 10 js选择器大全 一.总结 一句话总结:和css选择器很像 二.JQuery选择器 原生javaScript中,只能使用getELementById().getElementByNam ...
- Javascript中的DOM实现显示鼠标的空间位置
为了显示鼠标相对于浏览器的位置(相对于屏幕和页面类似),我们能够利用click事件,获得关于鼠标单击的事件对象event.这个事件对象里的clientX和clientY包括了鼠标的位置信息,所以我突发 ...
- 如何快糙好猛的使用libfacedetection库【最新版】
前言 最近已经很少看CSDN了.这一年多准备考研,基本上怕是不会再怎么上了.以前有一个http://blog.csdn.net/mr_curry/article/details/51804072 如何 ...
- lucene 统计单词次数(词频tf)并进行排序
public class WordCount { static Directory directory; // 创建分词器 static Analyzer analyzer = new IKAnaly ...
- JAVA SE回顾及思考(1)——面向对象的特点
学习Java已经三年了,现在开始做Android开发,虽说还在用Java语言但本人现在才真真的意识到无论学什么基础才是最重要的,可能一些刚接触Java或者Android的朋友现在还体会不到基础的重要性 ...
- 使用dom4j来处理xml的一些常用方法
要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/ 解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就 ...