VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#用代码打开软键盘

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  前段时间研究过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
{
  /// <summary>
  /// 获取系统所有的输入法,并可以程序改变当前输入法;打开关闭软键盘。
  /// 程序:房客
  /// QQ:83849123
  /// Blog:http://www.cnblogs.com/sxlfybb
  /// </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而直接打开虚拟键盘,不过这个和软键盘是不一样的。

  现在反钓鱼的软件越来越多了,祝大家共同进步。

  谢谢大家的支持,昨天晚上发的,到现在已经有好几个人加我问我了,为了方便大家,我把源程序一并也发在附件里,以供大家下载参考。

  点击下载http://file.ddvip.com/2008_10/1224468344_ddvip_6522.rar

 

 

  代码结束。

  另外,也可以直接执行OSK而直接打开虚拟键盘,不过这个和软键盘是不一样的。

  现在反钓鱼的软件越来越多了,祝大家共同进步。

  谢谢大家的支持,昨天晚上发的,到现在已经有好几个人加我问我了,为了方便大家,我把源程序一并也发在附件里,以供大家下载参考。

  点击下载http://file.ddvip.com/2008_10/1224468344_ddvip_6522.rar

 



相关教程