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
。