轻量级键盘鼠标模拟脚本引擎实现

来源 :软件 | 被引量 : 0次 | 上传用户:Jiang0596
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:文章研究了轻量级键盘鼠标模拟脚本引擎,给出了编程实现的关键技术和算法。
  关键字:键盘;鼠标;模拟;脚本引擎
  中图分类号: TP31 文献标识码:A DOI:10.3969/j.issn.1003-6970.2013.08.018
  本文著录格式:[1]吴文辉,任毅.轻量级键盘鼠标模拟脚本引擎实现[J].软件,2013,34(8): 56-57
  0 引言
  使用电脑会碰到这种情况,需要反复进行某个操作,当重复次数很多时可以借助键盘鼠标模拟引擎来实现,让人从大量重复的工作中解放出来,而且能减少错误。互联网上有这类软件下载,如按键精灵。如果喜欢编程序,可以自己编程实现一个轻量级键盘鼠标模拟脚本引擎。
  想一想操作电脑的过程,可以发现电脑上的操作都是通过鼠标、键盘来实现的。例如,安装一个软件,在屏幕上适当的地方,如“下一步”,点击鼠标或者按键盘进行下一步操作。仔细分析一下这个过程发现:要模拟键盘鼠标,必需解决3个问题,一是模拟键盘鼠标动作,二是识别电脑当前显示的图像,三是实现根据具体情况进行不同的模拟动作,即流程控制。编一个键盘鼠标模拟引擎,解决这3个问题,执行编好的脚本就可以实现各种常见自动键盘鼠标操作。下面以C#语言为例讲述轻量级键盘鼠标模拟脚本引擎的实现。
  1 模拟键盘鼠标模拟动作
  通过函数SendKeys.Send()模拟键盘操作,如模拟键盘按键“k”的语句为:
  SendKeys.Send(“k”); SendKeys.Flush();
  通过“user32.dll”中的mouse_event()函数模拟鼠标动作,调用该函数可以模拟鼠标左键单击、左键双击、右键单击等动作。
  2 图像识别
  本文实现轻量级键盘鼠标模拟脚本引擎,为了重复键盘鼠标操作设计,这里不讲述如何实现图像识别,简化处理,只记忆坐标值和识别某坐标位置颜色值,在大多数情况下足够使用。
  通过“gdi32.dll”中的CreateDC函数、BitBlt函数实现,在指定坐标处获取1像素大小的位图,然后判断其颜色值。
  3 轻量级键盘鼠标模拟脚本引擎
  一个脚本引擎应该包含的基本功能有:符号表、词法分析器、语法分析器、语义检查器、中间代码生成器、代码优化器、代码生成器、虚拟机,详细的内容可以参考编译原理相关知识。这里仅实现简单的符号表、语法分析、虚拟机。
  考虑轻量级键盘鼠标模拟脚本引擎中的变量、坐标值、颜色值都可以用int类型数据表示,符号表通过Dictionary类型的变量实现。
  轻量级键盘鼠标模拟脚本引擎中实现顺序、循环、分支三大基本流程控制,通过这三个流程控制可以实现任意流程。下面分别说明顺序、循环和分支的实现方法:
  顺序控制
  轻量级键盘鼠标模拟脚本引擎顺序读取脚本,没有控制语句时,按照读取的先后顺序解释执行每句脚本。每执行完一句脚本重新标记当前执行语句。
  循环控制
  这里简化一下,只实现for循环,其它的可以类似实现。for脚本样例如下:
  = i 1 //对变量i赋值1
  for i 10 //循环语句开始,在i<10时循环执行循环体,变量i每次增加1
  leftmouse 15,15 //在坐标15,15处单击鼠标左键
  next //循环语句结束
  上面的脚本中,“//”表示后面的内容为注释,每句脚本后面的注释解释了脚本的含义。
  轻量级键盘鼠标模拟脚本引擎执行for循环语句的过程如下:
  (1) 找到当前for开始语句对应的结束语句next,标记循环体范围
  (2) 判断循环变量是否在范围内,是则执行下面的循环体,否则跳到步骤5
  (3) 依次执行循环体中的每个语句
  a) 如果是break语句,中断循环,跳到步骤5
  b) 如果是continue语句,则结束本次循环,跳到步骤4
  c) 如果是exit语句,则中断循环,跳到步骤5
  d) 其它语句执行相应功能
  (4) 循环变量自增1,跳到步骤2
  (5) 将当前执行语句标记为next对应的语句,结束循环
  分支控制
  这里简化一下,只实现一个表达式的判断,if脚本样例如下:
  if 15,20 255,90,90,0 //判断坐标15,20处的颜色值是否为255,90,90,0(ARGB)
  break //是,跳出循环
  else //否则(可选)
  leftmouse 15,15 //否,在坐标15,15处单击鼠标左键
  endif //if语句结束
  轻量级键盘鼠标模拟脚本引擎执行if分支语句的过程如下:
  (1) 找到当前if开始语句对应的语句else、endif,标记各分支范围
  (2) 获取坐标点颜色值,如果颜色值误差在允许范围内,则认为判断条件成立,执行步骤3,否则跳到步骤5
  (3) 依次执行if分支中的每个语句
  a) 如果是break语句,中断分支语句,跳到步骤6
  b) 如果是continue语句,则结束分支语句,跳到步骤6
  c) 如果是exit语句,则中断分支语句,跳到步骤6
  d) 其它语句执行相应功能
  (4) 跳到步骤6
  (5) 如果没有else分支,则跳到步骤6,否则依次执行else分支中的每个语句
  a) 如果是break语句,中断分支语句,跳到步骤6
  b) 如果是continue语句,则结束分支语句,跳到步骤6
  c) 如果是exit语句,则中断分支语句,跳到步骤6
  d) 其它语句执行相应功能
  (6) 将当前执行语句标记为endif对应的语句,记录当前控制动作(break、continue、exit、none),结束当前分支语句。
  上面的三个基本控制语句的实现后,在脚本中可以随意组合、嵌套这三种控制语句,脚本都能正常执行。
  4 结论
  本文实现的轻量级键盘鼠标模拟脚本引擎可以实现日常中大多数键盘鼠标重复操作,实现过程简单,效率较高,已在某案例中实现每日千次重复操作。在编写脚本时,需要注意延时控制和颜色值的合理利用。可在此基础上实现函数等功能。
  参考文献
  [1] SHARP J(著), 周靖(译). Visual C# 2010从入门到精通. 清华大学出版社. 2010年.
其他文献
摘 要: 本文旨在揭示金融新常态表现出来的新特征和新风险,并表明这些新特征和新风险本质上是由金融从业人员的职业道德水平决定的,说明金融新常态下金融从业人员职业道德的重要性,但是我国高校金融职业道德教育现状基本呈空白状态,进而提出高校金融职业道德教育的迫切性和必要性,在此基础上重点探索构建主动适应金融新常态的高校金融职业道德教育体系的思路。  关键词: 金融新常态 金融职业道德 道德风险 金
哥哥,那天是邪种了你还是你种了邪?哥哥,那天窗台上的夏花开了开的火红,开的特别
<正> 近日,信息产业部电信管理局副局长张枢提出,将采取措施解决这种“联而不畅”问题。他表示,信息产业部将启动两项工程,包括电信网的经济成本核算、建立全国通信网络监控
随着互联网技术的日益普及,分布式计算模型在企业中的应用越发显得重要。以往在要求高性能、高可用性环境下进行业务复杂计算往往注重于单台高价计算机的运算性能和可靠性,目
从小当惯了乖乖女的我,从不知道什么是任性,也不能任性.可是,就有那么几次,我好想任性一次!
摘 要: 价值观是人类心灵的立交桥,沟通人的行为、态度、理想、信念等,影响人的自我了解、自我定向、自我设计等。中职生正处于价值观形成的关键时期,以语文学习为平台,进行价值教育,意义重大。本着这一理念,本文分析中职学生心理和学习现状,结合职高语文教学内容,提出在职高语文学习中强化价值教育的观点。  关键词: 中职生 语文学习 价值教育  《职业高级中学语文教学大纲》明确表述,在职业教育课程体系中,语
文章主要基于新农合背景下,对农村居民住院流向以及费用负担变化情况进行深入的分析。结合相关的调查结果可以了解到,新农合患者住院流向发生了非常明显的变化,乡镇卫生院住
父亲之所以被称为家里的顶梁柱,是因为小麦和玉米是他的左膀右臂,他用辛勤的劳动种好了庄稼,庄稼丰收了,不但养活了他,更让我们一家人衣食无忧。
在年复一年、迎来送往一届又一届高中毕业生的过程历练中,我不敢以“经验”来简单概括教学生活了,还应该加上困惑无奈与不断的探索、求知求新和努力地寻求解决方法.