WPF 模拟UI 键盘录入

开发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

http://www.cnblogs.com/gnielee/archive/2010/08/10/wpf-keyboard-auto-input.html

时间: 2024-08-02 06:59:36

WPF 模拟UI 键盘录入的相关文章

C#拓展练习之模拟键盘录入

摘自<31天学会CRM项目开发<C#编程入门级项目实战>> 使用C#调用Windows API使程序模拟键盘输入,也可模拟按下快捷键.本例中,单击“模拟输入”按钮,可录入字符“abcde123456”,单击“Ctrl+V”按钮可实现粘贴功能,效果如图16-2所示. 主要开发步骤如下:(1)    引用Windows API函数keybd_event(),通过它可模拟键盘录入.代码片段16-12 [DllImport("user32.dll")] private

键盘录入(Java)

键盘录入(Java): 1.导包 格式 import java.util.Scanner; 位置 在class上面 2.创建键盘录入对象 格式 Scanner sc = new Scanner(System.in); 3.通过对象获取数据 格式 int x = sc.nextInt(); import java.util.Scanner; class ScannerDemo { public static void main(String[] args) { //创建键盘录入数据对象 Scann

初学Java4:从键盘录入学生信息(仅姓名和成绩)并输出

//从键盘录入学生信息(仅姓名和成绩)并输出.public class StuInformation {//此处命名用StuScore可能更恰当 String name; double score;}import java.util.Scanner; public class TextStuInformation { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int i = 0, j

wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)

原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依赖属性也不介绍.),个人认为,依赖属性这个东西,有百分之五十是为了3D而存在.(自己写的类似于demo的东西)先上图,无图无真相这是demo的整个效果图,可以用鼠标移动,触摸屏也可以手指滑动,图片会移动,然后移动结束,会有一个回弹的判断. <Window x:Class="_3Dshow.Wi

Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例

1. 数据来自于键盘录入 键盘录入数据要自己控制录入结束. 2. 代码实现: (1)发送端: 1 package com.himi.updDemo1; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.util.Scanner; 8 9 /** 10 * 11

03_运算符、键盘录入、流程控制

1:运算符(掌握) (1)算术运算符  A:+,-,*,/,%,++,--  B:+的用法   a:加法   b:正号   c:字符串连接符  C:/和%的区别   数据做除法操作的时候,/取得是商,%取得是余数  D:++和--的用法   a:他们的作用是自增或者自减   b:使用    **单独使用     放在操作数据的前面和后面效果一样.     a++或者++a效果一样.    **参与操作使用     放在操作数的前面:先自增或者自减,再参与操作      int a = 10;  

键盘录入

/* * 为了让程序的数据更符合开发的数据,我们加入了键盘录入 * * 那么,我们如何实现键盘的录入呢? * A:倒包 * 格式: * import java.util.Scanner; * B:创建键盘录入对象 * 格式: * Scanner sc = new Scanner(System.in); * C:通过的对象获取数据 * 格式: * int x = sc.nextInt(); * */ import java.util.Scanner; public class Text { pub

TCP协议客户端键盘录入数据,服务器端写到文本文件

package cn.idcast9; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; // 客户端键盘录入数据,服务器端写到文本文件 public class ClientDemo

键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值

package cn; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; /**  * 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值  * 分析:  *  1.创建键盘录入对象  *  2.键盘录入多个数据,我们不知道有多少个,所以用集合存储  *  3.以0结束,只要键盘录入的数据是0,就退出循环  *      4.把集合转换成数组  *      5.对数组进行排