RPA一项重要的技术就是模拟人工对鼠标和键盘的一些操作,比如单击、双击、右击、拖拽等鼠标操作,或者键盘输入、快捷键使用、组合键使用等键盘操作,这项技术常用于游戏外挂的开发。
从原理上讲,当用户按下某一个键盘的按键时,键盘中的芯片就会检查到这个动作,并把扫描码(注:每个按键都有唯一的编码)返回给计算机。接下来,键盘驱动程序会接收这个扫描码,并把它转换为键盘虚拟码。对于同一个按键、不同键盘,扫描码可能不同,但按键的虚拟码是相同的,如按键A的虚拟码是65,那么十六进制就是&H41。接下来,操作系统会把键盘信息放置到队列消息中,并传送给当前的活动窗口。
RPA中有三种模拟技术。
第一种是应用级模式,可以模拟键盘消息发给目标应用程序,例如利用Windows中提供的API函数,如SendMessage和PostMessage。
第二种是系统级模拟,可以模拟全局键盘消息发送给所有程序的窗口,如利用API函数keybd_event或者全局钩子函数HOOK来模拟键盘消息。
第三种是驱动级模拟,可以直接读写键盘的硬件端口。这样的实现方式相当于绕过了应用层和操作系统层,直接与物理硬件进行对话。而普通应用程序是无权操作系统端口的,需要利用相应的驱动程序来实现。鼠标控制的方式是利用全局函数,需要给出横纵坐标才能确定鼠标的操作,如MOUSEEVENTF_MOVE(移动鼠标)、MOUSEEVENTF_LEFTDOWN(按下鼠标左键)和MOUSEEVENTF_LEFTUP(放开鼠标左键)等。
在不同的RPA软件中对于键盘操作的处理方式也不尽相同。在Automation Anywhere中的Insert Keystrokes(插入按键操作)命令中(如图3-5所示),键盘操作的处理方式是基于所需要操作的键盘的窗口录入数据,也可以插入参数和一些特殊的键盘操作。例如,“Control+C”的操作应处理为“[CTRL DOWN]c[CTRL UP]”。
图3-5 Automation Anywhere中的键盘操作窗口
在UiPath中键盘操作的处理方式是先选定一个对象,然后通过输入信息(Type Into)和发送热键(Send Hotkey)两个动作实现键盘操作,如图3-6所示。
图3-6 UiPath中的键盘操作窗口