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 ...
随机推荐
- myEclipse
破解myEclipse 建立一个java项目,将reg.java放入,并且运行在控制台 输入账户 回车就会出现 序列号 菜单栏--->myeclipse-->substription in ...
- Python从题目中学习:random() module
最近在给公司培训Python,布置了一道题: ----------------------------------------------------------------------------- ...
- display:none与visibility: hidden的区别
display:none和visibility: hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失. ...
- ssh IP打通,hadoop启动失败
ssh ip 无密码打通,hadoop启动失败 报错为:host'主机名' can't be established. 纠结了接近一个多小时 之后必须ssh 主机名 , yes一下,发现hadoop能 ...
- CSS3基础 02(2D /3D)
一.2D转换 概念:就是元素在2D平面上实现移动,旋转,缩放,斜切的操作就称之为2D转换 语法:transform:值 值:移动,旋转,缩放,斜切 (1.1)移动 transform:translat ...
- C++多重继承子类和父类指针转换过程中的一个易错点
这两天有个C++新手问了我一个问题,他的工程当中有一段代码执行不正确,不知道是什么原因.我调了一下,代码如果精简下来,大概是下面这个样子: class IBaseA { public: ; int m ...
- 主机名链接数据库,无法生成 SSPI 上下文
两台Server,环境一样,都使用同一域账号. 1的SQL Server可以通过Windows认证连接到2,但2通过Windows认证连接1时报如下错误: 目标主体名称不正确,无法生成 SSPI 上下 ...
- 特征工程 dataframe格式
import os import copy import codecs import operator import re from math import log from pyspark.sql ...
- Java设计模式——组合模式
JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...
- yii学习第一课 《命名空间》
<?php namespace a\b\c; class Apple { function getInfo() { echo 'this is a<br>'; } } <?ph ...