C#用代碼開啟軟鍵盤

來源:互聯網
上載者:User

前段時間研究過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>
    /// 擷取系統所有的IME,並可以程式改變當前IME;開啟關閉軟鍵盤。
    /// 程式:房客
    /// 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而直接開啟虛擬鍵盤,不過這個和軟鍵盤是不一樣的。
現在反釣魚的軟體越來越多了,祝大家共同進步。

謝謝大家的支援,昨天晚上發的,到現在已經有好幾個人加我問我了,為了方便大家,我把來源程式一併也發在附件裡,以供大家下載參考。

點擊下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.