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 ...
随机推荐
- 【转载】FormsAuthenticationTicket 对象
1.使用Forms验证存储用户自定义信息 Forms验证在内部的机制为把用户数据加密后保存在一个基于cookie的票据FormsAuthenticationTicket中,因为是经过特殊加密的,所以应 ...
- [React Router v4] Parse Query Parameters
React Router v4 ignores query parameters entirely. That means that it is up to you to parse them so ...
- [Postgres] Group and Aggregate Data in Postgres
How can we see a histogram of movies on IMDB with a particular rating? Or how much movies grossed at ...
- 【9602】&&【b402】合并果子
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成 ...
- SQL表的默认常用数据类型
分类 字段类型 描述 整数 bit 0或1的整型数字 int 从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数字 smallint 从-2^15(-32 ...
- Enhancing network controls in mandatory access control computing environments
A Mandatory Access Control (MAC) aware firewall includes an extended rule set for MAC attributes, su ...
- 【足迹C++primer】49、超载,更改,运营商
超载,更改.运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...
- POJ 1418 基本操作和圆 离散弧
Viva Confetti Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 761 Accepted: 319 Descr ...
- 利用jQuery传送json格式的字符串,后端用ashx文件来接收
在Default.aspx里面,我们会透过javascript建立两个物件,分别有Name和Age的属性,再透过Array的方式,将这两个物件塞到Array里面去.使用Ajax内建的$.ajax AP ...
- servlet-显示器
1.什么是监听器 监听器是实现一个特定的接口java规划,该计划的目的是还调用类方法监听器.java的awt大量使用该模式,如的能力button点击事件.当鼠标点击时,就会调用事件处理程序.又如:在j ...