当我试图在macossierra中使用Python环境中的Quartz Event Services以编程方式移动鼠标时,我遇到了一些问题。在
例如:
运行此脚本时:
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上运行Call of Duty: Modern Warfare 2,以这种方式移动鼠标不会在这个应用程序中注册,但有趣的是,我仍然能够在应用程序中使用CGEventPost
生成鼠标点击,而不是鼠标移动。在
所以我做了一些研究,试图弄清楚为什么会发生这种情况,而我能在网上找到的与我的问题相关的最接近的事情是this question,我提到这一点的原因是因为我想知道,在链接问题中,我是否需要调用类似于CGEventSetIntegerValueField
的方法,而不是更新kCGMouseEventClickState
更新鼠标事件与鼠标的移动有关,以便应用程序知道鼠标确实已移动。然而,我在CGEventField documentation中没有找到这样的方法,我只是觉得我遗漏了一些东西,或者这甚至与问题无关,但这是我能找到的唯一线索。在
请帮忙。如果有人能给我一些建议,我将不胜感激。在
我找到了答案。在
我改了这句话:
为此:
^{pr2}$当然导入了:
CGPostMouseEvent
因此,移动鼠标在任何地方和所有应用程序中都可以工作。它工作的原因是发现}。在
CGPostMouseEvent
发生在本地机器的更深层次上,而不是{相关问题 更多 >
编程相关推荐