C# 模拟Windows键盘事件
发送winform-Key值键盘消息
1.发送键盘消息
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
public static extern void keybd_event(
byte bVk, //虚拟键值
byte bScan,// 一般为0
int dwFlags, //这里是整数类型 0 为按下,2为释放
int dwExtraInfo //这里是整数类型 一般情况下设成为 0
);
使用系统dll下的keybd_event,来发送键盘消息。
dwFlags:0为按下,2为释放
所以发送一个组合键:LeftCtrl+LeftShift+Divide,需要如下操作:
- 组合键,每个键都需要发送
- 按键有按下和抬起操作。如果只发送按下,表示按键长按。。。
keybd_event((byte)Keys.LControlKey, , , );
keybd_event((byte)Keys.LShiftKey, , , );
keybd_event((byte)Keys.Divide, , , );
keybd_event((byte)Keys.Divide, , , );
keybd_event((byte)Keys.LShiftKey, , , );
keybd_event((byte)Keys.LControlKey, , , );
参考资料:
2.接收键盘消息
private void UIElement_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
OutputTextBox.Text += string.IsNullOrEmpty(OutputTextBox.Text) ? e.Key.ToString() : "\r\n" + e.Key.ToString();
OutputTextBox.SelectionStart = OutputTextBox.Text.Length + ;
}

发送WPF-Key值键盘消息
如果嫌上面的user32调用麻烦,nuget上已经有一个封装整套键盘事件的源InputSimulator,它很强大,可以做键盘、鼠标、输入发送操作。
InputSimulator,发送的是System.Windows.Input.Key值。

如下,发送的是ctrl+alt+multipy组合键:
var ctrlAndAlt = new List<VirtualKeyCode>() { VirtualKeyCode.LCONTROL, VirtualKeyCode.LMENU };
InputSimulator inputSimulator = new InputSimulator();
inputSimulator.Keyboard.ModifiedKeyStroke(ctrlAndAlt, VirtualKeyCode.MULTIPLY);
WPF-Winform键值类型转换
WPF提供了一个可以互转键盘键值类型的类KeyInterop,所以通过以下的俩个方法实现键值转换,wpf键值也可以通过user32发送。
var virtualKeyIntValue = KeyInterop.VirtualKeyFromKey(wpfKey)
var wpfKey = KeyInterop.KeyFromVirtualKey((int)winformKey)
Demo:https://github.com/Kybs0/KeyBoardEventDemo
C# 模拟Windows键盘事件的更多相关文章
- Linux 模拟 鼠标 键盘 事件
/************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: ...
- 由chrome剪贴板问题研究到了js模拟鼠标键盘事件
写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.cli ...
- linux系统下,在用户空间应用程序中模拟发送系统键盘事件
Linux 有自己的 input 子系统,可以统一管理鼠标和键盘事件. 如果想模拟键盘事件,但是系统没有键盘设备该如何是好? 基于输入子系统实现的 input 可以方便的在用户空间模拟鼠标和键盘事件. ...
- python 模拟windows键盘按键的封装
代码:在执行的时候,把光标放在指定的地方,在此例中,点击运行后把光标放到结果区域,粘贴的时候是粘贴到光标所在的问题,如过是运行脚本在web元素输入框中输入的话,不能移动光标到其他位置 #encodin ...
- 使用python监听、模拟鼠标键盘事件
最近守望职业选手疑似开挂事件挺热闹的,在下小菜一枚,并不能从视频中看出端倪.看了一些关于外挂的讨论,自动点射和压枪只需在鼠标驱动上做些改动即可,自瞄或其他高级功能则需要读内存或修改游戏文件,检测也更容 ...
- 使用jquery模拟键盘事件,但window系统并不会真的响应事件,只是浏览器当前页面会响应而已
<!DOCTYPE html> <html> <head> <title>Demo</title> <meta http-equiv= ...
- JS模拟键盘事件 -- 原理及小例子
提问: 键盘默认事件,比如tab切换,alt+f4关闭,ctrl+t新建等,如果不想通过键盘而是一些按钮点击来触发这些功能,该咋办呢? 例子: 先以tab为例上一个小例子: <!DOCTYPE ...
- selenium:2.selenium 键盘事件模拟
今晚不想加班,于是赶紧回来看看书,不知道今天怎么就突然特别想玩文明五,但是又要克制自己咯,所以还是看看书吧,干的事情有: 1.下了selenium的小工具:FireBug/FirePath. 2.确定 ...
- 使用Robot类模拟鼠标、键盘事件
Robot类用于模拟鼠标.键盘事件,生成本机系统输入事件.Robot 的主要用于自动化.自运行的程序和其他需要自动控制鼠标和键盘的程序 相当于实际操作的效果,不仅仅只是生成对应的鼠标.键盘事件.比如R ...
随机推荐
- hdu 2089 不要62 (数位dp基础题)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- iOS底层实现原理【高级进阶】
想要进阶,想要提升自己一个更高档次,想要拥有更高比格的iOS开发攻城狮们,请关注 ↓↓↓ 我的简书:https://www.jianshu.com/u/3adf2f8593b8 我的掘金:https: ...
- LAMP环境搭建与配置(1)
安装和配置MySQL.Apache.PHP 概念 LAMP是Linux Apache MySQL PHP 的简写,把Apache.MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的 ...
- Xposed反射字段流程分析
在XposedBridge源码中,反射字段的方法封装在de.robv.android.xposed.XposedHelpers类里面.下面来看看Xposed是如何获取和设置字段的值的 获取字段的值 获 ...
- JCC 指令
JCC跳转指令 JCC指条件跳转指令,CC就是指条件码. JCC指令 中文含义 英文原意 检查符号位 典型C应用 JZ/JE 若为0则跳转:若相等则跳转 jump if zero;jump if eq ...
- 我这样回答了Spring 5的新特性,面试官对我刮目相看
最近,有一个小伙伴拿到了自己满意的Offer,和他交谈的过程中得知他面试官问他关于Spring的问题比较多,其中最让面试官满意的就是自己回答关于Spring 5的知识点回答的不错. Spring5于2 ...
- NET Framework项目移植到NET Core上踩的坑(1)
本文章向大家介绍NET Framework项目移植到NET Core上遇到的一系列坑,主要包括NET Framework项目移植到NET Core上遇到的一系列坑使用实例.应用技巧.基本知识点总结和需 ...
- jquery 常用选择器基础语法学习
siblings方法的常用应用场景:选中高亮 实现代码 <!DOCTYPE html> <html> <head> <meta charset="U ...
- ARTS改版啦,在改变中前行
这次打卡,稍微进行了一次改版,在算法和英文文档上进行了拆分,具体的内容在前两天的文章里已经输出,所以在这篇上针对这两块做了一个汇总. 当然,技巧方面的还是在这里先输出,后续再考虑整改吧.循序渐进地上升 ...
- 速查TARGET_OS关系/Apple xcode 宏定义
记法 : 次级等于上级 TARGET_OS_WIN32 - Generated code will run under 32-bit Windows TARGET_OS_UNIX - Generate ...