热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> .Net编程>>正文内容

WPF 模拟UI 键盘录入[附源码下载]

发布时间:2010年08月11日点击数: 佚名

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

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

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

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

  1. using System; 
  2. using System.Threading; 
  3. using System.Windows; 
  4. using System.Windows.Input; 
  5. using System.Windows.Input.Test; 
  6. using System.Windows.Media; 
  7. using System.Windows.Threading; 
  8.  
  9. namespace WpKeyboard 
  10.     /// <summary> 
  11.     /// Interaction logic for MainWindow.xaml 
  12.     /// </summary> 
  13.     public partial class MainWindow : Window 
  14.     { 
  15.         public MainWindow() 
  16.         { 
  17.             InitializeComponent(); 
  18.         } 
  19.  
  20.         private void SendToUIThread(UIElement element, string text) 
  21.         { 
  22.             element.Dispatcher.BeginInvoke( 
  23.                 new Action(() => { SendKeys.Send(element, text); }), 
  24.                 DispatcherPriority.Input 
  25.             ); 
  26.         } 
  27.  
  28.         private void btn_Click(object sender, RoutedEventArgs e) 
  29.         { 
  30.             tb1.Foreground = new SolidColorBrush(Colors.Red); 
  31.             tb2.Foreground = new SolidColorBrush(Colors.Blue); 
  32.         } 
  33.  
  34.         private void Window_Loaded(object sender, RoutedEventArgs e) 
  35.         { 
  36.             ThreadPool.QueueUserWorkItem(_ => 
  37.             { 
  38.                 Thread.Sleep(3000); 
  39.  
  40.                 SendToUIThread(tb1, "Hello"); 
  41.                 Thread.Sleep(1000); 
  42.  
  43.                 SendToUIThread(tb1, " W"); 
  44.                 Thread.Sleep(1000); 
  45.  
  46.                 SendToUIThread(tb1, "o"); 
  47.                 Thread.Sleep(1000); 
  48.  
  49.                 SendToUIThread(tb1, "r"); 
  50.                 Thread.Sleep(1000); 
  51.  
  52.                 SendToUIThread(tb1, "ld!"); 
  53.                 Thread.Sleep(1000); 
  54.  
  55.                 SendToUIThread(mainWin, "^c"); 
  56.                 Thread.Sleep(1000); 
  57.  
  58.                 SendToUIThread(btn, "{ENTER}"); 
  59.             }); 
  60.         } 
  61.  
  62.         private void Window_KeyDown(object sender, KeyEventArgs e) 
  63.         { 
  64.             if (e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control) && e.Key == Key.C) 
  65.             { 
  66.                 tb2.Text = tb1.Text; 
  67.             } 
  68.         } 
  69.     } 

 

动态演示

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

Capture

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作