Macos Cocoa:如何发送正确的鼠标增量事件?
我正在为MacOSX(10.7.3)制作一个应用程序,使用gamepad中的模拟棒控制鼠标。 目前它运行得很好,我可以在桌面和大多数游戏中控制光标。但在Team Fortress 2中,我无法控制目标,但可以在菜单中控制光标。鼠标滚轮和点击在任何地方都有效。 另一件奇怪的事情是,当我移动真正的鼠标时,目标在正常瞄准之前“跳过”了我的“虚拟鼠标”的移动距离,所以它在某种程度上接收到了事件 游戏选项“原始鼠标输入”被禁用(我认为osx甚至不支持它)。一个类似的应用程序可以成功地控制目标 我怀疑游戏正在寻找“增量移动”或“相对移动”事件或任何类似事件,但我的代码使用绝对位置设置光标的位置。不知道如何改变这一点 以下是用于发送mouseMoved事件的代码片段: 编辑:垃圾代码删除 。 编辑: 另外,因为我是这样做的,所以我需要手动检查屏幕边界以防止光标发疯。因此,在多屏幕设置中,当用户更改分辨率时,情况会变得最糟如果我能发送移动量,让操作系统来约束光标,那就更好了。 问题是: 我以错误的方式执行鼠标移动事件? 如何解决此问题? 编辑2:Macos Cocoa:如何发送正确的鼠标增量事件?,macos,cocoa,events,mouse,Macos,Cocoa,Events,Mouse,我正在为MacOSX(10.7.3)制作一个应用程序,使用gamepad中的模拟棒控制鼠标。 目前它运行得很好,我可以在桌面和大多数游戏中控制光标。但在Team Fortress 2中,我无法控制目标,但可以在菜单中控制光标。鼠标滚轮和点击在任何地方都有效。 另一件奇怪的事情是,当我移动真正的鼠标时,目标在正常瞄准之前“跳过”了我的“虚拟鼠标”的移动距离,所以它在某种程度上接收到了事件 游戏选项“原始鼠标输入”被禁用(我认为osx甚至不支持它)。一个类似的应用程序可以成功地控制目标 我怀疑游戏正
所以,这只是一个愚蠢的错误,抱歉=P
我只是忘了用delta值调用CGSetIntegerValueField(kCGEventMouseDeltaX…)(和Y)=P
在短短几个小时的谷歌搜索和实验后,终于实现了这一点:)看起来Rodrigo试图说,在构建鼠标事件后,你必须调用
kCGMouseEventDeltaX
上的CGEventSetIntegerValueField
和kCGMouseEventDeltaY
我的代码,使用PyObjC:
from Quartz.CoreGraphics import (
CGEventCreate,
CGEventCreateMouseEvent,
CGEventGetLocation,
CGEventPost,
CGEventSetIntegerValueField,
kCGEventMouseMoved,
kCGHIDEventTap,
kCGMouseEventDeltaX,
kCGMouseEventDeltaY,
)
def mouse_delta(delta_x, delta_y):
"""
Send a MouseMoved event with the given deltaX and deltaY attributes,
but without changing the cursor location.
"""
# Might be a better way to get the current mouse location
x, y = CGEventGetLocation(CGEventCreate(None))
# The `mouseButton` parameter to CGEventCreateMouseEvent is ignored
# unless `mouseType` is kCGEventOtherMouse{Down,Dragged,Up},
# so let's just pass the value 0
event = CGEventCreateMouseEvent(None, kCGEventMouseMoved, (x, y), 0)
CGEventSetIntegerValueField(event, kCGMouseEventDeltaX, delta_x)
CGEventSetIntegerValueField(event, kCGMouseEventDeltaY, delta_y)
return CGEventPost(kCGHIDEventTap, event)
我也有同样的问题。。。我想知道你是否能更好地解释一下你是如何解决的?我只是把CGSetIntegerValueField()和其余的代码放在一起,解决了这个问题。这是相关的:谷歌搜索
CGSetIntegerValueField
和kCGEventMouseDeltaX
只返回这个页面和StackOverflow克隆:(@Rodrigo,如果你还在那里,你能发布一些代码,或者提供一些文档的链接吗?试图做基本相同的事情,我几乎不知所措!