C#打開軟鍵盤的方法
以前曾經(jīng)見別人CSDN上面問過如何用C#打開軟鍵盤,我也關注過,可沒有結(jié)果。在網(wǎng)上搜了一下也沒有能找出滿意的答案。今天就拿這個開開刀吧,反正大項目也沒有,只是一個小功能。結(jié)果沒曾想,弄出來了。也有好久沒有更新我的這一畝三分田了,就放上來了。
獻給那些為中國共享軟件和提高中國程序水平作努力的人們。
注:程序是在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
- {
- /// <summary>
- /// 獲取系統(tǒng)所有的輸入法,并可以程序改變當前輸入法;打開關閉軟鍵盤。
- /// 程序:房客
- /// 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
- );
- }
- }
用C#打開軟鍵盤代碼結(jié)束。
另外,也可以直接執(zhí)行OSK而直接打開虛擬鍵盤,不過這個和軟鍵盤是不一樣的。
現(xiàn)在反釣魚的軟件越來越多了,祝大家共同進步。
【編輯推薦】