WPF 虚拟键盘
之前做了一款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 虚拟键盘的更多相关文章
- [分享]WPF 虚拟键盘
场景:用WPF做触屏的软件难免会需要用户输入的问题,至少是简单的数字,这个时候就免不了需要键盘输入. 思路:既然是虚拟键盘,那么我的目的就是模拟键盘输入即可. 1.模拟键盘输入 模拟键盘输入?那么肯定 ...
- wpf 虚拟键盘 对外部程序
对外部程序,以记事本为例,xaml中设置模拟按键的控件 Focusable="False": /// <summary> /// 发送按键 /// </summa ...
- WPF 禁用TextBox的触摸后自动弹出虚拟键盘
前言 & 问题 如下截图,TextBox,在触摸点击后,会自动弹出windows的虚拟键盘. 如何,禁用键盘的自动弹出? 调用虚拟键盘 通过调用TapTip.exe或者osk.exe,主动弹出 ...
- Android开发案例 - 自定义虚拟键盘
所有包含IM功能的App(如微信, 微博, QQ, 支付宝等)都提供了Emoji表情之类的虚拟键盘, 如下图: 本文只着重介绍如何实现输入法键盘和自定义虚拟键盘的流畅切换, 而不介绍如何实现虚 ...
- Xamarin的不归路-安卓模拟器启动慢&没有虚拟键盘
1.启动慢解决方案:参考这篇文章进行配置 http://www.360doc.com/content/13/1002/18/532901_318605525.shtml 2.模拟器没有虚拟键盘解决方案 ...
- [原创]cocos2d-x研习录-第三阶 特性之按键与虚拟键盘
Cocos2D-x引擎支持按键事件,它能检测设备的键盘输入并处理相应的事件.而基于不同操作系统的移动设备,可供用户操作的按键数量和功能都存在差异. Cocos2D-x使用CCKeypadDeleg ...
- 039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件
用户控件ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="K ...
- 关于Android 打开新的Activity 虚拟键盘的弹出与不弹出
关于Android 打开新的Activity 虚拟键盘的弹出与不弹出 打开Activity 时 在相应的情况 弹出虚拟键盘 或者 隐藏虚拟键盘 会给用户非常好的用户体验 , 实现起来也比较简单 只需 ...
- JS虚拟键盘
由于是触摸屏,所以需要一款JS虚拟键盘.上网找了一个好用的VirtualKeyboard,作了修改. 修改该插件参考的博客文章:http://www.cnblogs.com/xinggong/arch ...
随机推荐
- windows 装 Crypto.Cipher
python 2.7 先去官网下载,https://www.dlitz.net/software/pycrypto/ 回来装这个,http://download.csdn.net/download/d ...
- Windows窗口自动缩放机制
通过自动缩放功能,能使在一个计算机上设计的界面在另一个具有不同分辨率或系统字体的计算机上能正常显示.这样窗体及其控件就能通过智能化调整大小以保障在本地电脑和用户电脑上保持一致. 自动缩放的必要性 如果 ...
- css兼容问题集合
css兼容问题 兼容问题 1.文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff下实际占高17px,上留白 ...
- MySQL备份学习
备份分类 物理和逻辑备份 物理备份直接拷贝数据库目录和文件,适合数据量大.重要且需要在出现问题时快速恢复的数据库 逻辑备份保存信息包括逻辑数据库结构(数据库表的创建脚本)和内容(插入语句或者分隔符平面 ...
- ecshop 商品页面添加商品标签:
/* @脚垫客户 需要给商品加属性.最简单粗暴的办法.后台调用加入.界面没有美化. */ goods.dwt <ul class="quantity"> <h2& ...
- VC++ 浅谈VS2010中CMFCToolBar的用法
本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...
- 深入理解js——函数和对象的关系
函数也是对象,但是函数却不像数组--数组是对象的一种,它是对象的一个子集.函数和数组之间不是单纯的包含与被包含的关系,它们之间有点像鸡生蛋蛋生鸡的逻辑. 来例子:function Fn(){ this ...
- Android permission
1. users-permission Users-permission is the permission that this app should acquire, so that the app ...
- E. Santa Claus and Tangerines 二分答案 + 记忆化搜索
http://codeforces.com/contest/752/problem/E 首先有一个东西就是,如果我要检测5,那么14我们认为它能产生2个5. 14 = 7 + 7.但是按照平均分的话, ...
- 奇怪的margin,padding,table
为什么有的时候margin,padding不管用?写了float以后就管用了? 为什么table 不给width,就默认是100%,里面的td会平均分配teble的宽度,若你想给其中一些td宽度,剩下 ...