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 ...
随机推荐
- 用JavaScript和CSS实现“在页面中水平和垂直居中”的时钟
思路:实现起来最麻烦的事实上是水平居中和垂直居中,当中垂直居中是最麻烦的. 考虑到浏览器兼容性,网上看了一些资料,发如今页面中垂直居中确实没有什么太好的办法. 于是就採用了position:fixed ...
- 设计模式-适配器模式(Go语言描写叙述)
在上一篇博客设计模式-策略模式(Go语言描写叙述)中我们用最简单的代码用go语言描写叙述了设计模式中的策略模式,用最简单的实例来描写叙述相信能够让刚開始学习的人能够非常轻松的掌握各种设计模式.继上篇博 ...
- ### Hibernate中的事务与并发 ###
**事务相关的概念** 1. 什么是事务 * 事务就是逻辑上的一组操作,组成事务的各个执行单元,操作要么全都成功,要么全都失败. * 转账的例子:冠希给美美转钱,扣钱,加钱.两个操作组成了一个事情! ...
- hibernate框架简单步骤
Demo.java package com.itheima.test; import org.hibernate.Session; import org.hibernate.SessionFactor ...
- HelloWorld RabbitMQ
RabbitMQ入门-从HelloWorld开始 从读者的反馈谈RabbitMQ 昨天发完<RabbitMQ入门-初识RabbitMQ>,我陆陆续续收到一些反馈.鉴于部分读者希望结合实例来 ...
- Bootstrap3简单好用,轻松实现手机适配
个人官网http://FansUnion.cn,前端使用Bootstrap框架.大部分的样式,轻松就实现了. 只是呢,关于导航条,被无数网友吐槽了. 通过手机访问时,导航条把屏幕给完全占居了 ...
- SpringMVC拦截器-路径语法-略坑
项目中遇到一种场景,登录拦截器需要拦截.html后缀等动态请求,但是发现语法不对头. <mvc:interceptors> <mvc:interceptor> ...
- iOS解决json串中的NSNull类型
iOS解决json串中的NSNull类型 后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符 ...
- mysql5.6+主从集的版本号(mysql5.5主机和从机载带后,5.5在设置有一定的差距)
怎么安装mysql数据库.这里不说了,仅仅说它的主从复制,过程例如以下 在进行主从设置之前 首先确保mysql主从server之间的数据库port防火墙互相打开, 尽量确保主从数据库账户一致性(主从切 ...
- JavaCPP 技术使用经验总结
本文是对 JNI 技术的一个补充方法,提出了替换 JNI.JNA 的一种开源技术.首先对 JavaCPP 技术进行简单介绍及对应于其他现有方案的介绍.对比.接下来,通过一个简单的示例让大家了解 Jav ...