十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
以前曾经见别人CSDN上面问过如何用C#打开软键盘,我也关注过,可没有结果。在网上搜了一下也没有能找出满意的答案。今天就拿这个开开刀吧,反正大项目也没有,只是一个小功能。结果没曾想,弄出来了。也有好久没有更新我的这一亩三分田了,就放上来了。

创新互联公司10多年成都定制网页设计服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,成都定制网页设计及推广,对成都花箱等多个行业拥有丰富的网站维护经验的网站建设公司。
献给那些为中国共享软件和提高中国程序水平作努力的人们。
注:程序是在VS2005里面,注意一下。控件需要自己添加了。一个ComboBox,一个Textbox,一个Button,直接拖进去没有更改name
用C#打开软键盘程序开始
- 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
 ;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);
 - }
 - public const int IME_CMODE_SOFTKBD = 0x80;
 - [DllImport("imm32.dll", EntryPoint = "ImmGetContext")]
 - public static extern IntPtr ImmGetContext(
 - IntPtr hwnd
 - );
 - [DllImport("imm32.dll", EntryPoint = "ImmGetConversionStatus")]
 - public static extern bool ImmGetConversionStatus(
 - IntPtr himc,
 - ref IntPtr lpdw,
 - ref IntPtr lpdw2
 - );
 - [DllImport("imm32.dll", EntryPoint = "ImmSetConversionStatus")]
 - public static extern bool ImmSetConversionStatus(
 - IntPtr himc,
 - IntPtr dw1,
 - IntPtr dw2
 - );
 - [DllImport("imm32.dll", EntryPoint = "ImmReleaseContext")]
 - public static extern int ImmReleaseContext(
 - IntPtr hwnd,
 - IntPtr himc
 - );
 - }
 - }
 
用C#打开软键盘代码结束。
另外,也可以直接执行OSK而直接打开虚拟键盘,不过这个和软键盘是不一样的。
现在反钓鱼的软件越来越多了,祝大家共同进步。