上一篇 | 下一篇

C#用代码打开软键盘

发布: 2008-6-30 10:12 | 作者: admin | 来源: | 查看: 30次

前段时间研究过API,后来由于工作关系就没有再玩C#,而别说API了。今天晚上正好加班,等其他部门出活等到凌晨一点多了,还没有动静。就趁机耍一耍了,正好学习一下VS2005。

以前曾经见别人CSDN上面问过如何用程序打开软键盘,我也关注过,可没有结果。在网上搜了一下也没有能找出满意的答案。今天就拿这个开开刀吧,反正大项目也没有,只是一个小功能。结果没曾想,弄出来了。也有好久没有更新我的这一亩三分田了,就放上来了。

献给那些为中国共享软件和提高中国程序水平作努力的人们。

注:程序是在VS2005里面,注意一下。控件需要自己添加了。一个ComboBox,一个Textbox,一个Button,直接拖进去没有更改name

以下程序开始

==================================

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace InputLanguageSwitch

{

///

/// 获取系统所有的输入法,并可以程序改变当前输入法;打开关闭软键盘。

/// 程序:房客

/// QQ:83849123

/// Blog:http://www.cnblogs.com/sxlfybb

///

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

this.InputLanguageChanged += new InputLanguageChangedEventHandler(Form1_InputLanguageChanged);

}

void Form1_InputLanguageChanged(object sender, InputLanguageChangedEventArgs e)

{

//throw new Exception("The method or operation is not implemented.");

for( int i=0;i

{

if (InputLanguage.CurrentInputLanguage.LayoutName == comboBox1.Items[i].ToString())

{

comboBox1.SelectedIndex = i;

}

}

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

string strTemp = comboBox1.Items[comboBox1.SelectedIndex].ToString();

InputLanguageCollection collects = InputLanguage.InstalledInputLanguages;

for (int i = 0; i < collects.Count; i++)

{

if (collects[i].LayoutName == strTemp)

InputLanguage.CurrentInputLanguage = collects[i];

}

}

private void Form1_Load(object sender, EventArgs e)

{

InputLanguageCollection collects = InputLanguage.InstalledInputLanguages;

for (int i = 0; i < collects.Count; i++)

{

comboBox1.Items.Add(collects[i].LayoutName);

}

comboBox1.SelectedIndex = collects.IndexOf(InputLanguage.CurrentInputLanguage);

}

private void button1_Click(object sender, EventArgs e)

{

this.textBox1.Focus();

IntPtr hwndInput = ImmGetContext(this.Handle);

IntPtr dw1 = IntPtr.Zero;

IntPtr dw2 = IntPtr.Zero;

bool isSuccess = ImmGetConversionStatus(hwndInput, ref dw1, ref dw2);

if (isSuccess)

{

int intTemp = dw1.ToInt32() & IME_CMODE_SOFTKBD;

if (intTemp > 0)

dw1 = (IntPtr)(dw1.ToInt32() ^ IME_CMODE_SOFTKBD);

else

dw1 = (IntPtr)(dw1.ToInt32() | IME_CMODE_SOFTKBD);

}

isSuccess = ImmSetConversionStatus(hwndInput, dw1, dw2);

ImmReleaseContext(this.Handle, hwndInput);

}

字号: | 推荐给好友

21/212>

评分:0

我来说两句

网络推荐