之前做了一款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. 12. Linux在线升级yum

    软件包仓库源 将yum源放在/etc/yum.repo.d root@cfm880 Packages]# cd /etc/yum.repos.d/[root@cfm880 yum.repos.d]# ...

  2. JAVA 多线程和并发学习笔记(一)

    一.进程与线程 1. 进程 当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序.进程是操作系统进行资源分配和调度的一个独立单位.进程的三个特征: 独立性 独立存在的实体,每个进程都有 ...

  3. 做一个高效的IOS开发工程师

    最近觉得自己的开发效率太慢了,总结了一下:熟练度不够是一方面,经常用到东西查看一下,积累问题?一方面,这个无法分享的.现在主要分享的是:如何高效的用好自己的时间. 1.善用xcode. xcode实在 ...

  4. linux基础知识(四)

    •查看ip地址,ifconfig命令 •重启.启动.停止网络命令 •service network restart/start/stop   •VMnet0:用于虚拟桥接网络下的虚拟交换机 •VMne ...

  5. C++Builder Berlin 编译

    编译工程,一个单元有错误,就停下了, 能不能把所有单元都编译,一次处理所有单元的错误?

  6. iOS 原生态扫描二维码、条形码的功能。

    1.导入AVFoundatin.framework. 2.新建一个viewController,命名为QRScanViewController,用于扫描的界面. h文件如下,设置代理. #import ...

  7. info grep半翻译加整理

    内容来源基本上是整理info grep而来,当然只整理了关于用法的部分.有些地方给出了些解释,算是对grep的一个细节概述吧. 1.1 grep选项 grep家族:grep -G或者grep使用基本正 ...

  8. delphi检查url是否有效的方法

    function CheckUrl(url: string; TimeOut: integer = 5000): boolean;var hSession, hfile, hRequest: hInt ...

  9. UART UVM验证平台平台搭建总结

    tb_top是整个UVM验证平台的最顶层:tb_top中例化dut,提供时钟和复位信号,定义接口以及设置driver和monitor的virual interface,在intial中调用run_te ...

  10. Allegro学习(http://www.asmyword.com/forum.php?mod=forumdisplay&fid=86)

    一.资源 1.网站推荐www.eda365.com,里面有很多有用的东西:当然还有官方代理商的网站http://www.pspice.com.cn/: 2.视频教程:有库源电气的视频教程,还有在www ...