CGEventPost并不总是移动鼠标macOS

时间:2017-07-25 21:04:26

标签: python macos events mouse steam

尝试在Python环境中使用Quartz Event Services在macOS Sierra中以编程方式移动鼠标时遇到了问题。

例如:

当我运行此脚本时:

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)

HOWEVER ,由于某种原因,此程序 无法在某些应用程序中移动鼠标。特别是在我的情况下,我的MacBook在Call of Duty: Modern Warfare 2上运行Steam,并且以这种方式移动鼠标不会在此应用程序中注册,但有趣的是我仍然可以使用{{1在应用程序中生成鼠标单击只是没有鼠标移动。

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

请帮忙。我将不胜感激任何人的建议。

1 个答案:

答案 0 :(得分:0)

我找到了答案。

我更改了这一行:

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

对此:

CGPostMouseEvent

当然导入:CGPostMouseEvent

因此,移动鼠标可以在任何地方和所有应用程序中使用。它起作用的原因是因为事实证明CGEventPost发生在本地机器的更深层次上而不是{{1}}。