1. /************************************************************
  2. FileName: SendKey.cs
  3.  
  4. Description: 模拟键盘指令,发送命令字符
  5. Version:
  6. ***********************************************************/
  7. using System;
  8. using System.Windows.Automation;
  9. using System.Threading;
  10. using System.Text;
  11. using System.Windows.Forms;
  12.  
  13. namespace 命名空间
  14. {
  15. /// <summary>
  16. /// 操作键盘命令
  17. /// </summary>
  18. public class SendKeys
  19. {
  20. StringBuilder builder = new StringBuilder();
  21.  
  22. public string Alt = "%";
  23. public string ContextMenu = "+{F10}";
  24. public string Ctrl = "^";
  25. public string Shift = "+";
  26. public string Enter = "{Enter}";
  27. public string Delete = "{Del}";
  28. public string Save = "^S";
  29. public string SaveAll = "^+S";
  30. public string Copy = "^C";
  31. public string Cut = "^X";
  32. public string Paste = "^V";
  33. public string Undo = "^Z";
  34. public string Redo = "^Y";
  35. public string Print = "^P";
  36. public string Help = "{F1}";
  37. public string New = "^N";
  38. public string DOWNARROW = "{DOWN}";
  39. public string UPARROW = "{UP}";
  40. public string LEFTARROW = "{LEFT}";
  41. public string RIGHTARROW = "{RIGHT}";
  42.  
  43. public string[] Keys { get; set; }
  44.  
  45. public void Sendkeys(AutomationElement element, string[] keys)
  46. {
  47. this.Keys = keys;
  48. try
  49. {
  50. // element.SetFocus();
  51. }
  52.  
  53. catch (Exception exception)
  54. {
  55. throw new Exception("Cannot set focus to this element.", exception);
  56. }
  57.  
  58. string myKeys = "";
  59.  
  60. foreach (string str2 in this.Keys)
  61. {
  62. myKeys = myKeys + str2;
  63. }
  64.  
  65. Thread.Sleep();
  66.  
  67. if ((this.ContainsUnescapedKey(myKeys, '^') || this.ContainsUnescapedKey(myKeys, '%')) || this.ContainsUnescapedKey(myKeys, '+'))
  68. {
  69.  
  70. myKeys = myKeys.ToLower();
  71.  
  72. }
  73.  
  74. System.Windows.Forms.SendKeys.SendWait(myKeys);
  75.  
  76. Thread.Sleep(0x3e8);
  77.  
  78. }
  79.  
  80. public void Sendkeys(AutomationElement element, string myKeys)
  81. {
  82. if (myKeys == string.Empty || myKeys == "") return;
  83. this.Keys = new string[];
  84.  
  85. this.Keys[] = myKeys;
  86.  
  87. try
  88. {
  89. //element.SetFocus();
  90. }
  91. catch (Exception exception)
  92. {
  93. throw new Exception("Cannot set focus to this element.", exception);
  94. }
  95.  
  96. Thread.Sleep();
  97.  
  98. if ((this.ContainsUnescapedKey(myKeys, '^') || this.ContainsUnescapedKey(myKeys, '%')) || this.ContainsUnescapedKey(myKeys, '+'))
  99. {
  100. myKeys = myKeys.ToLower();
  101. }
  102.  
  103. System.Windows.Forms.SendKeys.SendWait(myKeys);
  104.  
  105. Thread.Sleep(0x3e8);
  106.  
  107. }
  108.  
  109. /// <summary>
  110. /// 向活动应用程序发送击键。
  111. /// </summary>
  112. /// <param name="keys"></param>
  113. public void Sendkeys(string keys)
  114. {
  115. System.Windows.Forms.SendKeys.SendWait(keys);
  116.  
  117. Thread.Sleep(0x3e8);
  118. }
  119.  
  120. private bool ContainsUnescapedKey(string keys, char key)
  121. {
  122. for (int i = ; i < keys.Length; i++)
  123. {
  124. if (keys[i] == key)
  125. {
  126. if ((i == ) || (i == (keys.Length - )))
  127. {
  128. return true;
  129. }
  130.  
  131. if ((keys[i - ] != '{') || (keys[i + ] != '}'))
  132. {
  133. return true;
  134. }
  135. }
  136. }
  137.  
  138. return false;
  139.  
  140. }
  141.  
  142. private string KeysToString(string[] keys)
  143. {
  144. if (keys != null)
  145. {
  146.  
  147. for (int i = ; i < keys.Length; i++)
  148. {
  149. string str = keys[i];
  150. if (str == null)
  151. {
  152. builder.Append(keys[i]);
  153. }
  154.  
  155. int length = keys.Length - ;
  156.  
  157. switch (str)
  158. {
  159.  
  160. case "^":
  161. builder.Append("Ctrl");
  162. IsEquals(i, length, builder);
  163. break;
  164.  
  165. case "+{F10}":
  166. builder.Append("Open Context Menu");
  167. IsEquals(i, length, builder);
  168. break;
  169.  
  170. case "%":
  171. builder.Append("Alt");
  172. IsEquals(i, length, builder);
  173. break;
  174.  
  175. case "+":
  176. builder.Append("Shift");
  177. IsEquals(i, length, builder);
  178. break;
  179.  
  180. case "^S":
  181. builder.Append("Save");
  182. IsEquals(i, length, builder);
  183. break;
  184.  
  185. case "^X":
  186. builder.Append("Cut");
  187. IsEquals(i, length, builder);
  188. break;
  189.  
  190. case "^C":
  191. builder.Append("Copy");
  192. IsEquals(i, length, builder);
  193. break;
  194.  
  195. case "^V":
  196. builder.Append("Paste");
  197. IsEquals(i, length, builder);
  198. break;
  199.  
  200. case "^+S":
  201. builder.Append("Save All");
  202. IsEquals(i, length, builder);
  203. break;
  204.  
  205. case "^P":
  206. builder.Append("Print");
  207. IsEquals(i, length, builder);
  208. break;
  209.  
  210. case "^Z":
  211. builder.Append("Undo");
  212. IsEquals(i, length, builder);
  213. break;
  214.  
  215. case "^Y":
  216. builder.Append("Redo");
  217. IsEquals(i, length, builder);
  218. break;
  219.  
  220. case "^N":
  221. builder.Append("New");
  222. IsEquals(i, length, builder);
  223. break;
  224.  
  225. default:
  226. builder.Append(keys[i]);
  227. IsEquals(i, length, builder);
  228. break;
  229.  
  230. }
  231.  
  232. }
  233.  
  234. }
  235. return builder.ToString();
  236.  
  237. }
  238.  
  239. void IsEquals(int i, int length, StringBuilder builder)
  240. {
  241. if (i < length)
  242. builder.Append("+");
  243. }
  244.  
  245. #region Public Method
  246.  
  247. public override string ToString()
  248. {
  249. return string.Format("Sendkeys to input data or operator with keys = '{0}'", this.KeysToString(Keys));
  250. }
  251.  
  252. #endregion
  253.  
  254. }
  255.  
  256. }

SendKeys回车操作类的更多相关文章

  1. C# 文件操作类大全

      C# 文件操作类大全 时间:2015-01-31 16:04:20      阅读:1724      评论:0      收藏:0      [点我收藏+] 标签: 1.创建文件夹 //usin ...

  2. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  3. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  4. JQuery操作类数组的工具方法

    JQuery学习之操作类数组的工具方法 在很多时候,JQuery的$()函数都返回一个类似数据的JQuery对象,例如$('div')将返回div里面的所有div元素包装的JQuery对象.在这中情况 ...

  5. Util应用程序框架公共操作类(十二):Lambda表达式公共操作类(三)

    今天在开发一个简单查询时,发现我的Lambda操作类的GetValue方法无法正确获取枚举类型值,以至查询结果错误. 我增加了几个单元测试来捕获错误,代码如下. /// <summary> ...

  6. Util应用程序框架公共操作类(九):Lambda表达式扩展

    上一篇对Lambda表达式公共操作类进行了一些增强,本篇使用扩展方法对Lambda表达式进行扩展. 修改Util项目的Extensions.Expression.cs文件,代码如下. using Sy ...

  7. Util应用程序框架公共操作类(八):Lambda表达式公共操作类(二)

    前面介绍了查询的基础扩展,下面准备给大家介绍一些有用的查询封装手法,比如对日期范围查询,数值范围查询的封装等,为了支持这些功能,需要增强公共操作类. Lambda表达式公共操作类,我在前面已经简单介绍 ...

  8. Util应用程序框架公共操作类(七):Lambda表达式公共操作类

    前一篇扩展了两个常用验证方法,本文将封装两个Lambda表达式操作,用来为下一篇的查询扩展服务. Lambda表达式是一种简洁的匿名函数语法,可以用它将方法作为委托参数传递.在Linq中,大量使用La ...

  9. Util应用程序框架公共操作类(六):验证扩展

    前面介绍了仓储的基本操作,下面准备开始扩展查询,在扩展查询之前,首先要增加两个公共操作类,一个是经常要用到的验证方法,另一个是Lambda表达式的操作类. 很多时候,我们会判断一个对象是否为null, ...

随机推荐

  1. Linux的软连接与硬链接

    Linux的软连接相当于window系统的快捷方式,如我们桌面的QQ等. 硬连接相当于复制一个文件,但不同的是两个文件内容同步.如创建一个文件A的硬连接B, 如果我修改A里面的内容,同时B中的内容也会 ...

  2. elasticsearch2

    简单认为是可以在命令行下访问url的一个工具 curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求. curl -x 指定http请求的方法 ...

  3. jQuery Ajax 方法调用 Asp.Net WebService 以及调用aspx.cs中方法的详细例子

    一.jQuery Ajax 方法调用 Asp.Net WebService (引自Terry Feng) Html文件 <!DOCTYPE html PUBLIC "-//W3C//D ...

  4. Spark RDD简介与运行机制概述

    RDD工作原理: 主要分为三部分:创建RDD对象,DAG调度器创建执行计划,Task调度器分配任务并调度Worker开始运行. SparkContext(RDD相关操作)→通过(提交作业)→(遍历RD ...

  5. NeHe OpenGL教程 第六课:纹理映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. Android之SQLite

    在模拟器运行的情况下,进入cmd运行adb shell 可进入模拟器的linux系统输入 lite3 mars_test_db 可进入sqlite模式.schema或者.sch 查看有哪些表 SQLi ...

  7. 第一个APP:IOS做简单运算的计算器

    步骤: 1.打开Xcode,单机Creat a new Xcode project 2.左边选择ios下Application,右边选择single view Application 3.填写项目名称 ...

  8. [Flex] PopUpButton系列 —— 判断下拉列表是否选中

    <?xml version="1.0" encoding="utf-8"?> <!--Flex中如何利用dataDescriptor属性和is ...

  9. div滚动到页面顶端后固定住

    <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title> ...

  10. ios开发下的点透处理

    界面上有一个浮动的div,这个div下面有一个文本框,当给这个div绑定touchstar后,做了冒泡的处理代码,还是会出现点透现象,触发下面的的文本框事件.立马弹出一个输入法出来. 1.网上有一种方 ...