C# Winform制作虚拟键盘,支持中文

来源:互联网 发布:linux进程 编辑:程序博客网 时间:2024/05/16 15:49

          最近在做一个虚拟键盘功能,代替鼠标键盘操作,效果如下:

       实现思路:

         1  构建中文-拼音 数据库,我用的是SQLite数据库,如

              

         2 构建布局,如效果图





代码:

  数据库代码文件  SqlHandler.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SQLite;using System.Configuration;using System.IO;using System.Reflection;using System.Windows.Forms;namespace TestKeyBord{     public class SqlHandler    {        public  static void InitSQLite(string db,string table)        {            try            {                DbName = db;                TableName = table;                if (CreateDataBase())                {                    _SQLiteCommand = _SQLiteConn.CreateCommand();                    _SQLiteCommand.Connection = _SQLiteConn;                    DesignerTable();                }            }            catch            {                          }        }        public static System.Data.ConnectionState SqliteState        {            get { return _SQLiteConn.State; }        }        #region 数据成员定义                public static string DbName = "MedicalSystemLog";        public static string TableName = "MedicalLog";        public static string _SQLiteConnString = string.Empty;        public static SQLiteConnection _SQLiteConn = new SQLiteConnection();               public static SQLiteCommand _SQLiteCommand = new SQLiteCommand();                             #endregion        #region 创建数据库文件        public static bool CreateDataBase()        {            try            {                _SQLiteConnString = "Data Source=" + DbName + ".db";                _SQLiteConn = new SQLiteConnection(_SQLiteConnString);                _SQLiteConn.Open();                _SQLiteCommand = _SQLiteConn.CreateCommand();                _SQLiteCommand.Connection = _SQLiteConn;                if (File.Exists(DbName + ".db"))                {                    return true;                }            }            catch            {               // MessageBox.Show("日志系统加载失败!");            }            return false;        }        #endregion        /// <summary>        /// 矩阵是否连接        /// </summary>        public static bool MatrixIsConnected = false;        #region 创建表         public static void DesignerTable()        {            try            {                if (_SQLiteConn.State != System.Data.ConnectionState.Open)                {                    _SQLiteConn.Open();                }                List<string> list = new List<string> { };                list.Add("ID VARCHAR(5)");//汉字ID                list.Add("Chinese VARCHAR(5)");//汉字                list.Add("English VARCHAR(10)");//拼音                CreateTabel(TableName, list);                list.Clear();            }            catch            {               // MessageBox.Show("创建日志数据库失败!");            }        }        public static bool ClearSystemLog()        {            try            {                                if (_SQLiteConn.State != System.Data.ConnectionState.Open)                {                    _SQLiteConn.Open();                }                if (_SQLiteConn.State == System.Data.ConnectionState.Open)                {                    _SQLiteCommand.CommandText = "delete from " + TableName + ";";                    _SQLiteCommand.ExecuteNonQuery();                }                _SQLiteConn.Close();            }                         catch (Exception ex)             {                   // MessageBox.Show("清除日志失败:" + ex.Message);                    return false;              }            return true;        }             public static bool InsertData(string cn,string en,string id)        {            try            {                               if (_SQLiteConn.State != System.Data.ConnectionState.Open)                {                    _SQLiteConn.Open();                }                if (_SQLiteConn.State == System.Data.ConnectionState.Open)                {                    _SQLiteCommand.CommandText = "insert into " + TableName + " values('" +                       id + "','" + cn + "','" + en +  "');";                    _SQLiteCommand.ExecuteNonQuery();                }                _SQLiteConn.Close();            }            catch (Exception ex)            {               // MessageBox.Show("日志写入失败:" + ex.Message);                return false;            }            return true;        }              public static List<string[]> GetData(string en)        {            List<string[]> list = new List<string[]> { };            try            {                _SQLiteCommand.CommandText = "select * from " + TableName + " where English='"+en+"';";                using (SQLiteDataReader reader = _SQLiteCommand.ExecuteReader())                {                    string[] items = new string[] { };                    while (reader.Read())                    {                        items = new string[]                        {                             reader[0].ToString(),                            reader[1].ToString(),                            reader[2].ToString(),                        };                        list.Add(items);                    }                }            }            catch (Exception ex)            {                MessageBox.Show(ex.Message + "=== GetDocInfo() ===" + ex.StackTrace);            }            return list;        }        public static List<string> GetZnData(string en)        {            en = en.ToLower(); ;            List<string> list = new List<string> { };            try            {                _SQLiteCommand.CommandText = "select * from " + TableName + " where English='" + en + "';";             //  MessageBox.Show(_SQLiteCommand.CommandText);                using (SQLiteDataReader reader = _SQLiteCommand.ExecuteReader())                {                    string[] items = new string[] { };                    while (reader.Read())                    {                                                list.Add(reader["Chinese"].ToString());                    }                }            }            catch (Exception ex)            {                MessageBox.Show(ex.Message + "=== GetDocInfo() 2222 ===" + ex.StackTrace);            }            return list;        }        public static void CreateTabel(string tableName,List<string> columes )        {            if (_SQLiteConn.State != System.Data.ConnectionState.Open)            {                _SQLiteConn.Open();            }            if (_SQLiteConn.State == System.Data.ConnectionState.Open)            {                                string sql = "SELECT COUNT(*) FROM sqlite_master where type='table' and name='" + tableName + "';";                               _SQLiteCommand.CommandText = sql;                if (Convert.ToInt32(_SQLiteCommand.ExecuteScalar()) == 0)//1表示存在,0表示不存                {                    sql = string.Empty;                    foreach (string str in columes)                    {                        sql += str + ",";                    }                    _SQLiteCommand.CommandText = string.Format(                        "CREATE TABLE {0} (" + sql.Substring(0, sql.Length - 1) + ")"                        , tableName);                    _SQLiteCommand.ExecuteNonQuery();                    _SQLiteConn.Close();                }            }            else            {                MessageBox.Show("创建表失败,请打开数据库!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);            }        }        public static string PinConvert(string en)         {            string data = "";            string enLow = en.ToLower();            for (int i = 0; i < enLow.Length; i++)            {                if (enLow[i].ToString() == "ā")                {                }            }            return data;        }        #endregion    }}

源码下载地址: http://download.csdn.net/detail/taoerit/9686889





更新 2017-2-13 ,还有个简单的方法 

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace TestForm{    public partial class Form1 : Form    {        [DllImport("user32.dll", EntryPoint = "keybd_event")]        public static extern void keybd_event(            byte bVk,                          //定义一个虚据拟键码。键码值必须在1~254之间。            byte bScan,                        //定义该键的硬件扫描码            int dwFlags,            int dwExtraInfo        );        private void button1_Click(object sender, EventArgs e)        {            // 81 表示Q,具体看虚拟键盘表示码            textBox1.Focus();            keybd_event(81, 0, 0, 0);                      //Q压下            keybd_event(81, 0, 0x02, 0);                   //Q弹起        }                public Form1()        {            InitializeComponent();        }         private void Form1_Load(object sender, EventArgs e)        {         }            }}
虚拟键盘码









1 0