在Mac上模拟鼠标

时间:2010-02-26 08:59:48

标签: iphone macos mouse mouseevent

我的iPhone上有一个虚拟触控板,用于移动我正在使用的鼠标:


CGDisplayMoveCursorToPoint(kCGDirectMainDisplay, CGPointMake(((float)aD.msg)+location.x, ((float)aD.msg2)+location.y));

它运行良好,但这不是真正的鼠标,因为当我将鼠标放在隐藏的基座上时,这个不会自动显示它。我不明白为什么。 更多的我尝试用以下方法模拟鼠标点击:


case MOUSECLICK:
[self postMouseEventWithButton:0 withType:kCGEventLeftMouseDown andPoint:CGEventGetLocation(CGEventCreate(NULL))];
[self postMouseEventWithButton:0 withType:kCGEventLeftMouseUp andPoint:CGEventGetLocation(CGEventCreate(NULL))];

// *********************

-(void)postMouseEventWithButton:(CGMouseButton)b withType:(CGEventType)t andPoint:(CGPoint)p { CGEventRef theEvent = CGEventCreateMouseEvent(NULL, t, p, b); CGEventSetType(theEvent, t); CGEventPost(kCGHIDEventTap, theEvent); CFRelease(theEvent); }

这是好方法吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

CGDisplayMoveCursorToPoint()仅移动光标图像,不会生成任何事件。您应该创建并发布类型为kCGEventMouseMoved的鼠标事件,以模拟移动鼠标。你自己的方法会这样做:

[self postMouseEventWithButton:0 withType:kCGEventMouseMoved andPoint:point];

对于点击,我认为你已经以正确的方式做了。您还应该做的一件事是在鼠标按下和鼠标按下事件上正确设置点击次数,如下所示:

CGEventSetIntegerValueField(event, kCGMouseEventClickState, 1);

...因为有些应用程序需要它。

(另见Simulating mouse clicks on Mac OS X does not work for some applications

如果你的代码不起作用,我不确定为什么;它对我来说很好看。尝试发布到kCGSessionEventTap而不是kCGHIDEventTap,看看是否有帮助。此外,您不需要CGEventSetType()调用,因为类型已在创建调用中设置。