开发WinForm 应用程序时可以利用SendKeys 类方便的模拟键盘录入操作。那么在WPF 中如何为控件实现键盘模拟呢?本篇将使用WPF SendKeys 实现和WinForm 中相同的效果。

首先将WpfSendKeys.dll 加入到项目References 中,在XAML 中加入两个Textbox 和一个Button 如下代码。

<Window x:Class="WpKeyboard.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Loaded="Window_Loaded" KeyDown="Window_KeyDown"  x:Name="mainWin" Height="350" Width="525"><Grid><TextBox x:Name="tb1" FontSize="50" Margin="73,12,84,218" /><TextBox x:Name="tb2" FontSize="50" Margin="73,119,84,117" /><Button x:Name="btn" Content="Auto Click and Change Font Color" Click="btn_Click"  Margin="73,229,84,36" /></Grid>
</Window>

打开C#程序,添加System.Windows.Input.Test 命名空间。定义SendToUIThread 方法用于将键盘指令发送到WPF 控件上。在Window_Loaded 中通过调用SendToUIThread 方法向Textbox 中逐一写入"Hello World!" 字符,并对字符进行拷贝,最后实现自动点击Button 完成更换字体颜色的操作。其中字符串拷贝工作是通过判断模拟键盘输入的内容为"Control+C",即将字符串拷贝到第二个Textbox 中。

using System;
using System.Threading;
using System.Windows;
using System.Windows.Input;
using System.Windows.Input.Test;
using System.Windows.Media;
using System.Windows.Threading;namespace WpKeyboard
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void SendToUIThread(UIElement element, string text){element.Dispatcher.BeginInvoke(new Action(() => { SendKeys.Send(element, text); }),DispatcherPriority.Input);}private void btn_Click(object sender, RoutedEventArgs e){tb1.Foreground = new SolidColorBrush(Colors.Red);tb2.Foreground = new SolidColorBrush(Colors.Blue);}private void Window_Loaded(object sender, RoutedEventArgs e){ThreadPool.QueueUserWorkItem(_ =>{Thread.Sleep(3000);SendToUIThread(tb1, "Hello");Thread.Sleep(1000);SendToUIThread(tb1, " W");Thread.Sleep(1000);SendToUIThread(tb1, "o");Thread.Sleep(1000);SendToUIThread(tb1, "r");Thread.Sleep(1000);SendToUIThread(tb1, "ld!");Thread.Sleep(1000);SendToUIThread(mainWin, "^c");Thread.Sleep(1000);SendToUIThread(btn, "{ENTER}");});}private void Window_KeyDown(object sender, KeyEventArgs e){if (e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control) && e.Key == Key.C){tb2.Text = tb1.Text;}}}
}

动态演示

程序运行后无需点击任何按键,程序自动完成图中操作。

源代码下载

WpKeyboard.zip

本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2010/08/10/wpf-keyboard-auto-input.html,如需转载请自行联系原作者

WPF 模拟UI 键盘录入相关推荐

  1. 我爱高圆圆 键盘录入数据,模拟单项选择题

    键盘录入数据,模拟单项选择题(注意:键盘录入的时候,Scanner不能录入字符) 下面的人物喜欢谁?A:马伊琍B:马苏C:高圆圆("假设为正确答案")D:林志玲 package z ...

  2. 【Python养成】:案例(身高体重BMI值、模拟用户登录系统、键盘录入10个学生的成绩,计算出最高分、最低分和成绩总和、词频统计)

    案例题目:身高体重BMI值 计算成人身高体重指数BMI值.公式:bmi = 体重 / (身高 * 身高),体重的单位是千克,身高的单位是米 .键盘输入身高和体重值,计算bmi值,并根据结果对用户做出友 ...

  3. 基于 WPF + Modern UI 的 公司OA小助手 开发总结

    前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个阶段的一个反思.人只有在总结的过程中才会发现自己的不足. 公司每天都要在OA系统上上班点击签到,下班点击签退 ...

  4. java 第一章 > java背景,数据类型,键盘录入,标识符

    背景介绍 java: 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 SUN公司1995年推出 詹姆斯·高斯林 版本: Java SE:标准版,用于桌面应用的 ...

  5. 发送linux键盘消息,在C#程序中模拟发送键盘按键消息

    using System.Runtime.InteropServices; 引入键盘事件函数 [DllImport("user32.dll")] public static ext ...

  6. 效率提升:使用AppleScript模拟鼠标键盘操作制作自动化工具

    文章目录 前言 AppleScript的实践应用 实践:还原修饰键默认设置 AppleScript基础知识 1.基本模块 语法 变量和属性 类型转换 运算符 List(数组) Record(键值对) ...

  7. wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了 ...

  8. wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...

  9. Java 基础语法(键盘录入数据,水仙花数,各类循环,random,数组,内存分配,方法,面向对象、封装、this、构造方法、标准类、API)

    DAY1 基础语法 1 键盘录入数据,使用变量接收 导包.创建对象.接收数据 import java.util.Scanner; Scanner sc = new Scanner(System.in) ...

  10. Delphi下利用WinIo模拟鼠标键盘详解

    本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-17207-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 前言 一日发现Se ...

最新文章

  1. docker 使用挂载运行tomcat
  2. R语言时间序列(time series)分析实战:简单指数平滑法预测
  3. Zookeeper架构
  4. NO11 java5的线程锁技术(Lock Condition)
  5. 一个JSON字符串和文件处理的命令行神器jq,windows和linux都可用
  6. js文件代码未加载或者没有js效果
  7. python __call__或者说func()()的理解
  8. Hashtable combox绑定数据
  9. 新手搭建网站服务器(Ubuntu+LAMP)
  10. Dom对象与jQuery对象的转换
  11. MASK RCNN在tensorflow 2.5中运行
  12. COMSOL Multiphysics多物理场仿真技术与应用
  13. 为个人博客添加文章评论功能
  14. 计算机英语教学设计反思,英语教学设计与反思
  15. 浅析SEO搜索引擎优化
  16. 1753: [Usaco2005 qua]Who's in the Middle (快速排序)
  17. 字节跳动后端开发实习生面试经验
  18. DSPE-PEG6-Mal,C60H111N2O17P小分子PEG试剂化学性质
  19. Python基础入门自学——18--操作Excel-工作实践需求
  20. iimap服务器没有响应,解决imap被vimIM和谐掉的问题

热门文章

  1. Beaglebone Black – 连接 GY-91 MPU9250+BMP280 九轴传感器(2)
  2. mvvm 模板中事件没有执行的解决方案
  3. JavaScript学习笔记(四)
  4. Linux 设置系统时间和时区2.Ubuntu
  5. MySQL授权root
  6. NOIP2016滚粗记
  7. Caffe + Ubuntu 14.04 64bit + CUDA6.5 + 无GPU 配置
  8. Implement Trie (Prefix Tree)
  9. 发布HTML5 2D游戏引擎YEngine2D
  10. 【Wonder整理】防止重复提交并弹出半透明对话框