之前做了一款WPF虚拟键盘,调用Win32的API,可以模拟键盘事件。

现将代码分享如下:

按键布局如下:

   <Button Name="CmdTlide" Focusable="False" Click="Button_Click"  Style="{StaticResource InformButton}"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="" Height="">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" ><Run Text="~"/></TextBlock>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom" ><Run Text="'"/></TextBlock>
</StackPanel>
</Button>

点击事件:

 private void Button_Click(object sender, RoutedEventArgs e)
{
System.Windows.Controls.Button keybtn = sender as System.Windows.Controls.Button;
#region//First Row
if (keybtn.Name == "CmdTlide")
{
addNumkeyINput(0xc0);
}
else if (keybtn.Name == "cmd1")
{
addNumkeyINput(0x31);
}
else if (keybtn.Name == "cmd2")
{
addNumkeyINput(0x32);
}
else if (keybtn.Name == "cmd3")
{
addNumkeyINput(0x33);
}
else if (keybtn.Name == "cmd4")
{
addNumkeyINput(0x34);
}
else if (keybtn.Name == "cmd5")
{
addNumkeyINput(0x35);
}
else if (keybtn.Name == "cmd6")
{
addNumkeyINput(0x36); }
else if (keybtn.Name == "cmd7")
{
addNumkeyINput(0x37);
}
else if (keybtn.Name == "cmd8")
{
addNumkeyINput(0x38);
}
else if (keybtn.Name == "cmd9")
{
addNumkeyINput(0x39);
}
else if (keybtn.Name == "cmd0")
{
addNumkeyINput(0x30); }
else if (keybtn.Name == "cmdminus")//-_
{
addNumkeyINput(0xbd);
}
else if (keybtn.Name == "cmd1")//+=
{
addNumkeyINput(0xbb);
}
else if (keybtn.Name == "cmdBackspace")//backspace
{
AddKeyBoardINput(0x08);
}
#endregion
#region//Second Row
else if (keybtn.Name == "CmdTab")
{
AddKeyBoardINput(0x09);
}
else if (keybtn.Name == "CmdQ")
{
AddKeyBoardINput(0x51);
}
else if (keybtn.Name == "Cmdw")
{
AddKeyBoardINput(0x57); }
else if (keybtn.Name == "CmdE")
{
AddKeyBoardINput(0X45); }
else if (keybtn.Name == "CmdR")
{
AddKeyBoardINput(0X52); }
else if (keybtn.Name == "CmdT")
{
AddKeyBoardINput(0X54); }
else if (keybtn.Name == "CmdY")
{
AddKeyBoardINput(0X59); }
else if (keybtn.Name == "CmdU")
{
AddKeyBoardINput(0X55); }
else if (keybtn.Name == "CmdI")
{
AddKeyBoardINput(0X49); }
else if (keybtn.Name == "CmdO")
{
AddKeyBoardINput(0X4F);
}
else if (keybtn.Name == "CmdP")
{
AddKeyBoardINput(0X50);
}
else if (keybtn.Name == "CmdOpenCrulyBrace")
{
addNumkeyINput(0xdb);
}
else if (keybtn.Name == "CmdEndCrultBrace")
{
addNumkeyINput(0xdd);
}
else if (keybtn.Name == "CmdOR")
{
addNumkeyINput(0xdc);
}
#endregion
#region///Third ROw else if (keybtn.Name == "CmdCapsLock")//caps lock
{
AddKeyBoardINput(0x14);
if (checkImage.Visibility != Visibility.Visible)
{
checkImage.Visibility = Visibility.Visible;
}
else
{
checkImage.Visibility = Visibility.Hidden;
}
}
else if (keybtn.Name == "CmdA")
{
AddKeyBoardINput(0x41);
}
else if (keybtn.Name == "CmdS")
{
AddKeyBoardINput(0x53);
}
else if (keybtn.Name == "CmdD")
{
AddKeyBoardINput(0x44);
}
else if (keybtn.Name == "CmdF")
{
AddKeyBoardINput(0x46);
}
else if (keybtn.Name == "CmdG")
{
AddKeyBoardINput(0x47);
}
else if (keybtn.Name == "CmdH")
{
AddKeyBoardINput(0x48);
}
else if (keybtn.Name == "CmdJ")
{
AddKeyBoardINput(0x4A);
}
else if (keybtn.Name == "CmdK")
{
AddKeyBoardINput(0X4B);
}
else if (keybtn.Name == "CmdL")
{
AddKeyBoardINput(0X4C); }
else if (keybtn.Name == "CmdColon")//;:
{
addNumkeyINput(0xba);
}
else if (keybtn.Name == "CmdDoubleInvertedComma")//'"
{
addNumkeyINput(0xde);
}
else if (keybtn.Name == "CmdEnter")
{
AddKeyBoardINput(0x0d);
}
#endregion
#region//Fourth Row
else if (keybtn.Name == "CmdShift" || keybtn.Name == "CmdlShift")
{
if (CtrlFlag)
{
CtrlFlag = false;
ShiftFlag = false;
changeInput();
}
else
{
ShiftFlag = true;
}
}
else if (keybtn.Name == "CmdZ")
{ AddKeyBoardINput(0X5A); }
else if (keybtn.Name == "CmdX")
{
AddKeyBoardINput(0X58); }
else if (keybtn.Name == "CmdC")
{
AddKeyBoardINput(0X43); }
else if (keybtn.Name == "CmdV")
{
AddKeyBoardINput(0X56); }
else if (keybtn.Name == "CmdB")
{
AddKeyBoardINput(0X42); }
else if (keybtn.Name == "CmdN")
{
AddKeyBoardINput(0x4E); }
else if (keybtn.Name == "CmdM")
{
AddKeyBoardINput(0x4D);
}
else if (keybtn.Name == "CmdLessThan")//<,
{
addNumkeyINput(0xbc);
}
else if (keybtn.Name == "CmdGreaterThan")//>.
{
addNumkeyINput(0xbe);
}
else if (keybtn.Name == "CmdQuestion")//?/
{
addNumkeyINput(0xbf);
} else if (keybtn.Name == "CmdSpaceBar")
{
AddKeyBoardINput(0x20);
}
#endregion
#region//Last row
else if (keybtn.Name == "CmdCtrl" || keybtn.Name == "CmdlCtrl")//ctrl
{
if (ShiftFlag)
{
ShiftFlag = false;
CtrlFlag = false;
}
else
{
CtrlFlag = true;
}
//AddKeyBoardINput(0x11);
}
else if (keybtn.Name == "CmdpageUp")
{
AddKeyBoardINput(0x21);
}
else if (keybtn.Name == "CmdpageDown")
{
AddKeyBoardINput(0x22);
}
else if (keybtn.Name == "CmdClose")//关闭键盘
{
//this.Opacity = 0;
// this.Close();
// this.keyboard.Visibility = Visibility.Hidden;
//this.keyboard.Focusable = false; System.Windows.Application.Current.Shutdown();
}
#endregion
}

触发键盘事件:

  private static void addNumkeyINput(byte input)
{
if (CtrlFlag)
{
CtrlFlag = false;
ShiftFlag = false;
keybd_event(input, , , );
keybd_event(input, , 0x02, );
}
else
{
if (!ShiftFlag)
{
keybd_event(input, , , );
keybd_event(input, , 0x02, );
}
else
{
keybd_event(0x10, , , );//shift
keybd_event(input, , , );
keybd_event(input, , 0x02, );
keybd_event(0x10, , 0x02, ); ShiftFlag = false;
}
}
}

源码下载

WPF 虚拟键盘的更多相关文章

  1. [分享]WPF 虚拟键盘

    场景:用WPF做触屏的软件难免会需要用户输入的问题,至少是简单的数字,这个时候就免不了需要键盘输入. 思路:既然是虚拟键盘,那么我的目的就是模拟键盘输入即可. 1.模拟键盘输入 模拟键盘输入?那么肯定 ...

  2. wpf 虚拟键盘 对外部程序

    对外部程序,以记事本为例,xaml中设置模拟按键的控件 Focusable="False": /// <summary> /// 发送按键 /// </summa ...

  3. WPF 禁用TextBox的触摸后自动弹出虚拟键盘

    前言 & 问题 如下截图,TextBox,在触摸点击后,会自动弹出windows的虚拟键盘. 如何,禁用键盘的自动弹出? 调用虚拟键盘 通过调用TapTip.exe或者osk.exe,主动弹出 ...

  4. Android开发案例 - 自定义虚拟键盘

    所有包含IM功能的App(如微信, 微博, QQ, 支付宝等)都提供了Emoji表情之类的虚拟键盘,  如下图:    本文只着重介绍如何实现输入法键盘和自定义虚拟键盘的流畅切换, 而不介绍如何实现虚 ...

  5. Xamarin的不归路-安卓模拟器启动慢&没有虚拟键盘

    1.启动慢解决方案:参考这篇文章进行配置 http://www.360doc.com/content/13/1002/18/532901_318605525.shtml 2.模拟器没有虚拟键盘解决方案 ...

  6. [原创]cocos2d-x研习录-第三阶 特性之按键与虚拟键盘

    Cocos2D-x引擎支持按键事件,它能检测设备的键盘输入并处理相应的事件.而基于不同操作系统的移动设备,可供用户操作的按键数量和功能都存在差异.   Cocos2D-x使用CCKeypadDeleg ...

  7. 039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件

    用户控件ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="K ...

  8. 关于Android 打开新的Activity 虚拟键盘的弹出与不弹出

    关于Android 打开新的Activity 虚拟键盘的弹出与不弹出 打开Activity 时  在相应的情况 弹出虚拟键盘 或者 隐藏虚拟键盘 会给用户非常好的用户体验 , 实现起来也比较简单 只需 ...

  9. JS虚拟键盘

    由于是触摸屏,所以需要一款JS虚拟键盘.上网找了一个好用的VirtualKeyboard,作了修改. 修改该插件参考的博客文章:http://www.cnblogs.com/xinggong/arch ...

随机推荐

  1. 创建struct类型的数组

    在autoit中,如何创建类似这样的数组呢?如下方式,数组的element只是存储的地址相邻,所以我们可以这样做 $tagMYSTRUCT = "int code; char msg[10] ...

  2. 全局修改Lable/Button字体

    本次版本需求要把原来的字体全改掉,由于项目中有的是代码创建的,有的是XIB中直接改的,一个一个改工作量太大,使用运行时可以很轻松的实现        首先,项目中大多数设置字体的控件有 Lable, ...

  3. html doctype 作用介绍

    文档模式主要有以下两个作用: 1.告诉浏览器使用什么样的html或xhtml规范来解析html文档 2.对浏览器的渲染模式产生影响:不同的渲染模式会影响到浏览器对于 CSS 代码甚至 JavaScri ...

  4. phpexcel导入excel表格

    html代码 <form action="{:U('Mall/updExcel')}" method="POST" enctype="multi ...

  5. Android开发--环境的配置

    一 Android开发环境:JDK.eclipse ADT.海马模拟器或者夜神模拟器.配置之前先保证运行内存足够大,不然会导致运行卡. 二 JDK(不用安装) 1.jdk官方下载地址:http://w ...

  6. 系统中定义VOMapping的时候注意大小写

    VOMapping中的第一个参数一定要严格按照大小写(缩写的单词容易错): 例如:VO中的定义: private CntVOEnums.EnumIVRStage ivrStage; 实际反射找这个字段 ...

  7. MFC的自定义消息的定义与使用

    自定义消息的响应和资源消息的响应有很多类似之处:资源消息的响应是以资源的ID号作为标识的:自定义的消息要自己声明消息ID. 一.           定义: 第一步要声明消息: #define WM_ ...

  8. MySQL主从同步的延迟原理

    1. MySQL数据库主从同步延迟原理. 答:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlo ...

  9. SVG 使用

    SVG即Scalable Vector Graphics可缩放矢量图形,使用XML格式定义图形, 主要优势在于可缩放的同时不会影响图片的质量. SVG 在html 中常用的方法 1.使用<img ...

  10. Mycat配置文件schema.xml参数配置

    Mycat原理: Mycat的原理中最重要的一个动词是"拦截",它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析.路由分析.读写分离分析.缓存分析等 ...