网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.从DataGridView控件托放数据到Tr.
.C#中的抽象类.
.关于C#中timer类 在C#里关于定时.
.C#中对注册表的操作.
.使用C#查询路由接口,同时小议一.
.C# 2.0中的上传多个图片合并及存.
.用C#动态创建Access数据库.
.C#中ref和out的使用小结.
.C#代码与JavaScript函数的相互调.
.在C#中使用COM+实现事务控制.
.远程注册表读取,与多线程池的应用.
.C# Enum设计和使用的相关技巧 .
..NET中多线程的同步资源访问.
.C#消息队列应用程序 -1.
.用http代理下载sourceforge的cvs.
.采用C#泛型实现数据库之间的切换.
.一个产生中文累计数的代码片断.
.提取HTML代码中文字的C#函数.
.从Internet上抓取指定URL的源码的.
.选择 VB.NET 还是 C# ? .

C#用代码打开软键盘

发表日期:2006-5-26


前段时间研究过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://sxlfybb.cnblogs.com/files/sxlfybb/InputLanguageSwitch.rar

上一篇:保护你的DLL和Code不被别人使用 人气:7084
下一篇:C#中Windows通用的回车转Tab方法 人气:9115
浏览全部C#的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐