快捷搜索:

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

{

///

/// Interaction logic for MainWindow.xaml

///

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

您可能还会对下面的文章感兴趣: