`
maricoliu
  • 浏览: 55190 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

pyobjc实现鼠标事件模拟(Mac)

    博客分类:
  • Mac
阅读更多

既然pyobjc能够使用cocoa提供的这么多库函数,那对我们有没有一些实际的作用呢?联想到在自动化测试中,appscript有些操作目前还是无法实现的,例如:

无法实现点击屏幕任意坐标(appscript中未找到类似的api)

无法双击某个控件(通过appscript两次调用控件的click方法是不生效的)

无法实现控件上右键……

现在,这些appscript无法完成的操作,通过pyobjc又找到了另一条实现的途径,我们可以借助pyobjc,来构造并触发我们需要的鼠标事件,cocoa的 CoreGraphics库中就包含了构造所有鼠标事件的方法,在苹果开发者网站上了解了这些函数的使用方式后,实现一个fakemouse,能否完成的操作有:点击屏幕任意坐标、在任意坐标双击、在任意坐标鼠标右键、移动鼠标至某个坐标、鼠标拖拽等。具体实现代码如下:

 

#!/usr/bin/python   
''''' 
Created on 2013-8-30 
 
@author: maricoliu 
'''  
import sys  
import time  
from 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   

 

分享到:
评论

相关推荐

    后台 模拟 键盘 鼠标

    在Mac OS X中,AppleScript可以用来模拟键盘和鼠标事件,而`pyobjc`库则为Python提供了与AppleScript的接口。另外,`pyautogui`同样支持Mac OS X平台。 除了编程语言的库之外,还有一些专门的工具,如AutoHotkey...

    Python库 | pyobjc-framework-PhotosUI-5.1.2.tar.gz

    《Python库pyobjc-framework-PhotosUI深度解析》 在Python的世界里,丰富的库资源是其强大功能的重要支撑。本文将深入探讨一个特定的Python库——`pyobjc-framework-PhotosUI`,版本为5.1.2。这个库是Python与...

    PyPI 官网下载 | pyobjc-framework-PhotosUI-6.0.1.tar.gz

    标题中的"PyPI 官网下载 | pyobjc-framework-PhotosUI-6.0.1.tar.gz"表明这是一个从Python Package Index(PyPI)官方下载的软件包,名为`pyobjc-framework-PhotosUI-6.0.1.tar.gz`。PyPI是Python开发者发布和分享...

    判断系统是否安装鼠标和鼠标是否有滚轮

    滚轮信息通常由`BTN Middle`或`BTN Side`事件表示,这些事件代表鼠标中键或侧键,一般出现在滚轮鼠标上。 ```bash ls /dev/input/by-id | grep -i mouse ``` 如果返回结果非空,说明至少有一个鼠标设备连接。 对于...

    PyPI 官网下载 | pyobjc-framework-Cocoa-6.0.1.tar.gz

    Pyobjc-framework-Cocoa这个库使得Python开发者能够利用Cocoa的全部功能,如创建GUI应用程序、实现多线程、处理图形、音频和视频,以及访问系统服务等。通过Python的简洁语法和强大的生态系统,Pyobjc为Apple平台的...

    PyPI 官网下载 | pyobjc_framework_CloudKit-8.0-py2.py3-none-any.whl

    **PyPI 官网下载 | pyobjc_framework_CloudKit-8.0-py2.py3-none-any.whl** PyPI(Python Package Index)是Python开发者最常用的一个资源库,它提供了大量的第三方Python软件包,方便用户下载和安装。在Python生态...

    Python库 | pyobjc-framework-SpriteKit-8.4.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:pyobjc-framework-SpriteKit-8.4.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | pyobjc_core-8.0-cp39-cp39-macosx_10_9_universal2.whl

    3. **事件驱动编程**:通过`pyobjc_core`,Python可以集成到Cocoa事件模型中,处理用户界面事件,如鼠标点击、键盘输入等。 4. **系统集成**:可以使用`pyobjc_core`与Apple的系统服务进行交互,如访问硬件信息、...

    Python库 | pyobjc-4.1-py3-none-any.whl

    2. **事件处理**:使用pyobjc,Python开发者可以处理Cocoa事件,如窗口关闭、按钮点击等,实现与用户的交互。 3. **Foundation框架**:pyobjc也支持访问Foundation框架,这是一组基本的面向对象的工具,包括数据...

    Python库 | pyobjc-framework-SearchKit-2.4.tar.gz

    5. 实现事件监听,例如索引更新或者查询完成事件,以进行相应的处理。 **应用场景** `pyobjc-framework-SearchKit-2.4`适用于需要在macOS平台进行全文搜索的应用,比如: 1. 内容管理系统:在大量文档中快速查找...

    Python库 | pyobjc_framework_PubSub-7.2-py2.py3-none-any.whl

    总的来说,`pyobjc_framework_PubSub`为Python开发者提供了一个强大的工具,让他们能够在macOS环境下利用PubSub框架的能力,实现高效、灵活的事件管理和进程通信。通过深入理解和实践,开发者可以构建出更加健壮和...

    PyPI 官网下载 | pyobjc-framework-AppleScriptObjC-2.3.tar.gz

    在“pyobjc-framework-AppleScriptObjC”中,这个功能被扩展到了AppleScriptObjC框架,让Python开发者能够利用AppleScriptObjC的能力,例如控制Mac上的应用程序或与Apple事件模型交互。 在分布式系统领域,如...

    PyPI 官网下载 | pyobjc-framework-Automator-8.0b1.tar.gz

    Pyobjc是一个强大的Python绑定工具,它允许Python程序直接调用Objective-C的API,从而充分利用Mac OS X(现为macOS)系统丰富的功能。在这个特定的版本8.0b1中,Pyobjc集成了Automator框架,使得Python开发者能够...

    pyobjc-tc.rar_Different

    标题 "pyobjc-tc.rar_Different" 暗示了这是一个关于 Python 和 Objective-C 集成的项目,其中可能涉及到不同的结构或方法。描述 "Check different structures" 提醒我们,这个压缩包的内容可能包括对多种数据结构...

    Python库 | pyobjc_core-5.0b1-cp37-cp37m-macosx_10_6_intel.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:pyobjc_core-5.0b1-cp37-cp37m-macosx_10_6_intel.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | pyobjc-framework-AppleScriptKit-4.2.2.tar.gz

    Pyobjc-framework-AppleScriptKit的核心功能在于,它允许Python代码直接执行AppleScript命令,或者创建、管理Apple事件。这对于那些需要在Mac环境下自动化任务、控制其他应用程序的开发者来说,无疑是一个强大的工具...

    Python库 | pyobjc_core-8.0-cp37-cp37m-macosx_10_9_x86_64.whl

    今天我们将聚焦于一个特定的库——pyobjc_core,它为Python开发者提供了与Apple的Objective-C运行时交互的能力,从而使得Python可以在Mac OS X和iOS系统上无缝地访问和利用Cocoa框架以及其他Objective-C原生功能。...

    PyPI 官网下载 | pyobjc-framework-Message-5.1.tar.gz

    《PyPI与Pyobjc-framework-Message-5.1:Python在Mac OS X中的Objective-C桥接》 PyPI,全称Python Package Index,是Python开发者的重要资源库,它提供了大量可重复使用的Python软件包,方便用户下载和安装。在...

    PyPI 官网下载 | pyobjc-framework-PreferencePanes-8.1.tar.gz

    标题中的"PyPI 官网下载 | pyobjc-framework-PreferencePanes-8.1.tar.gz"指的是Python Package Index(PyPI)上的一个软件包,名为`pyobjc-framework-PreferencePanes`,版本为8.1,它被打包成一个tar.gz格式的压缩...

Global site tag (gtag.js) - Google Analytics