pyobjc实现鼠标事件模拟(Mac)
来源:互联网 发布:淘宝店铺怎么绑定旺旺 编辑:程序博客网 时间:2024/05/17 23:57
既然pyobjc能够使用cocoa提供的这么多库函数,那对我们有没有一些实际的作用呢?联想到在自动化测试中,appscript有些操作目前还是无法实现的,例如:
无法实现点击屏幕任意坐标(appscript中未找到类似的api)
无法双击某个控件(通过appscript两次调用控件的click方法是不生效的)
无法实现控件上右键……
现在,这些appscript无法完成的操作,通过pyobjc又找到了另一条实现的途径,我们可以借助pyobjc,来构造并触发我们需要的鼠标事件,cocoa的 CoreGraphics库中就包含了构造所有鼠标事件的方法,在苹果开发者网站上了解了这些函数的使用方式后,实现一个fakemouse,能否完成的操作有:点击屏幕任意坐标、在任意坐标双击、在任意坐标鼠标右键、移动鼠标至某个坐标、鼠标拖拽等。具体实现代码如下:
#!/usr/bin/python'''Created on 2013-8-30@author: maricoliu'''import sysimport timefrom Quartz.CoreGraphics import * def _mouseEvent(type, posx, posy): theEvent = CGEventCreateMouseEvent(None, type, (posx,posy), kCGMouseButtonLeft) CGEventPost(kCGHIDEventTap, theEvent) def mouseMove(posx, posy): _mouseEvent(kCGEventMouseMoved, posx, posy) def mouseClickDown(posx, posy): _mouseEvent(kCGEventLeftMouseDown, posx, posy) def mouseClickUp(posx, posy): _mouseEvent(kCGEventLeftMouseUp, posx, posy) def mouseDrag(posx, posy): _mouseEvent(kCGEventLeftMouseDragged, posx, posy) def mouseClick(posx, posy): '''perform a left click''' _mouseEvent(kCGEventLeftMouseDown, posx, posy) _mouseEvent(kCGEventLeftMouseUp, posx, posy) def mouseRightClick(posx, posy): theEvent = CGEventCreateMouseEvent(None, kCGEventRightMouseDown, (posx,posy), kCGMouseButtonRight) CGEventPost(kCGHIDEventTap, theEvent) theEvent2 = CGEventCreateMouseEvent(None, kCGEventRightMouseUp, (posx,posy), kCGMouseButtonRight) CGEventPost(kCGHIDEventTap, theEvent2)def mouseDoubleClick(posx, posy): '''perfrom a double left click''' theEvent = CGEventCreateMouseEvent(None, kCGEventLeftMouseDown, (posx,posy), kCGMouseButtonLeft); CGEventPost(kCGHIDEventTap, theEvent); CGEventSetType(theEvent, kCGEventLeftMouseUp); CGEventPost(kCGHIDEventTap, theEvent); CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2); CGEventSetType(theEvent, kCGEventLeftMouseDown); CGEventPost(kCGHIDEventTap, theEvent); CGEventSetType(theEvent, kCGEventLeftMouseUp); CGEventPost(kCGHIDEventTap, theEvent);def mouseScroll(movement=30, direction=1): ''' @param movement: lines to scroll, Integer @param direction: scroll up or scroll down, 1:scroll up, -1:scroll down ''' for i in range(movement): theEvent = CGEventCreateScrollWheelEvent(None, kCGScrollEventUnitLine, 1, direction) CGEventPost(kCGHIDEventTap, theEvent) time.sleep(0.02) #CGPostScrollWheelEvent(1, 5)if __name__ == '__main__': ourEvent = CGEventCreate(None); currentpos=CGEventGetLocation(ourEvent); # Save current mouse position time.sleep(1); for i in range(20): mouseScroll(40, 1) mouseScroll(40, -1) # mouseclick(1610, 215) # mousedoubleclick(1697, 561) time.sleep(1); #mouseMove(int(currentpos.x),int(currentpos.y)); # Restore mouse position
- pyobjc实现鼠标事件模拟(Mac)
- Android 模拟键盘鼠标事件(Socket+Instrumentation实现)
- android 模拟键盘鼠标事件(Socket+Instrumentation实现)
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- Androd 模拟键盘、鼠标事件(adb shell 实现)
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- C#中实现模拟鼠标事件
- C#中实现模拟鼠标事件
- Mac os 代码实现鼠标双击事件
- Qt for Mac模拟鼠标以及键盘事件
- 模拟鼠标点击事件
- 模拟鼠标键盘事件
- C# 模拟鼠标事件
- QT 模拟鼠标事件
- c++模拟鼠标事件
- 异常 Exception与RuntimeException(1)
- _mysql_exceptions.OperationalError: **(2002, "Can't connect to local MySQL server through socket '/v
- 刘志军为什么能一手遮天
- mysql命令行操作
- [K/3Cloud] 在插件中为辅助资料赋值
- pyobjc实现鼠标事件模拟(Mac)
- iOS 本地化应用
- TinyXML读取XML文件 [大三四八九月实习]
- 异常 Exception与RuntimeException(2)
- 安卓手机ROM和RAM的区别
- LightOJ 1004 - Monkey Banana Problem
- 递归算法-----递归算法优化------非递归算法(递推,迭代)----运行时间
- LightOJ 1005 - Rooks
- 软基作业——顺序线性表的插入