CGEventPost并不总是移动鼠标macOS

问题描述:

我试图在Python环境中使用Quartz Event Services在编码macOS Sierra中以编程方式移动鼠标时遇到问题。CGEventPost并不总是移动鼠标macOS

例如:

当我运行此脚本:

from Quartz.CoreGraphics import CGEventCreateMouseEvent 
from Quartz.CoreGraphics import CGEventPost 
from Quartz.CoreGraphics import kCGMouseButtonLeft 
from Quartz.CoreGraphics import kCGEventMouseMoved 
from Quartz.CoreGraphics import kCGHIDEventTap 


def MouseMove(x, y): 
     event = CGEventCreateMouseEvent(None, kCGEventMouseMoved, (x, y), kCGMouseButtonLeft) 
     CGEventPost(kCGHIDEventTap, event) 

MouseMove(100, 100) 

一切的伟大工程,获取鼠标移到(x: 100, y: 100)

但是,由于某种原因,此过程设法在某些应用程序中移动鼠标。特别是在我的情况下,我的MacBook正在运行 Steam并以这种方式移动鼠标不会在此应用程序中注册,但有趣的是,我仍然能够使用CGEventPost而不是鼠标移动在应用程序中生成鼠标点击。

所以我做了一些研究,试图找出为什么会发生这种情况,我可以在网上找到与我的问题最接近的东西是this question,所以我提到这是因为我想知道是否喜欢在链接的问题中,我需要调用类似CGEventSetIntegerValueField之类的方法,而不是更新kCGMouseEventClickState更新与鼠标移动相关的鼠标事件,以便应用程序知道鼠标确实已移动。然而,我还没有在CGEventField documentation中找到这样的方法,我只是觉得我错过了一些东西,或者这可能甚至没有涉及到问题,但这是我能找到的唯一方法。

请帮忙。我会很感激任何人可能有的建议。

我找到了答案。

我改变了这一行:

event = CGEventCreateMouseEvent(None, type, (x, y), kCGMouseButtonLeft) 
CGEventPost(kCGHIDEventTap, event) 

要这样:

CGPostMouseEvent((x, y), True, 0, False) 

当然进口和:CGPostMouseEvent

其结果是,移动鼠标的工作原理无处不在,所有的应用程序。它之所以能够正常工作,是因为事实证明CGPostMouseEvent发生在本地计算机的更深层次上,而不是CGEventPost