C# 打开软键盘的实现方法

发布时间:2019-07-18编辑:脚本学堂
C# 打开软键盘的实现方法,有需要的朋友可以参考下。注意:以上代码在vs2005中开发完成。控件需要自己添加: ComboBox Textbox Button

C# 打开软键盘的实现方法,有需要的朋友可以参考下。

注意:以上代码在vs2005中开发完成。
控件需要自己添加:
ComboBox
Textbox
Button
其三个,直接拖进去,未修改名称。

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 
    { 
    /// <summary>
    /// 获取系统所有的输入法,并可以程序改变当前输入法;打开关闭软键盘。 
    /// 程序:房客 
    /// QQ:83849123 
    /// Blog:http://www.cnblogs.com/ sxlfybb
    /// Link:http://www.jb200.com
    /// </summary>
    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<comboBox1.Items.Count;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 
    ); 
    
    } 
    }

备注:
其实,也可以直接执行OSK而直接打开虚拟键盘,不过这个和软键盘是不一样的。