4

当以编程方式移动鼠标光标时,您必须设置CGSetLocalEventsSuppressionInterval0使事件实时进入,而不是延迟 250 毫秒。

不幸的是,CGSetLocalEventsSuppressionInterval在 Snow Leopard 中被标记为已弃用。

另一种方法是CGEventSourceSetLocalEventsSuppressionInterval(CGEventSourceRef source, CFTimeInterval seconds); https://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/func/CGEventSourceSetLocalEventsSuppressionInterval

-(void) mouseMovement:(CGEventRef) newUserMouseMovement
{
    //Move cursor to new position
    CGSetLocalEventsSuppressionInterval(0.0); //Deprecated in OS X 10.6
    CGWarpMouseCursorPosition(NSPointToCGPoint(newMousePosition));
    CGSetLocalEventsSuppressionInterval(0.25); //Deprecated in OS X 10.6

    //--OR--//

    CGEventSourceRef source = ???;
    CGEventSourceSetLocalEventsSuppressionInterval(source, 0.0);
    CGWarpMouseCursorPosition(NSPointToCGPoint(newMousePosition));
    CGEventSourceSetLocalEventsSuppressionInterval(source, 0.25);
}

我无法让后一种方法起作用。

所以我想我的问题是如何获得该CGEventSourceRef功能所需的?

是用户正常鼠标移动的事件源吗?还是为了我手动扭曲光标?

4

2 回答 2

4

事件源似乎在任何地方都没有解释,也没有人知道如何使用它们。

CGPoint warpPoint = CGPointMake(42, 42);
CGWarpMouseCursorPosition(warpPoint);
CGAssociateMouseAndMouseCursorPosition(true);

在 warp 调用后立即调用 CGAssociateMouseAndMouseCursorPosition( true ) 以使 Quartz 事件系统放弃此特定 warp 的延迟。

于 2013-07-09T11:24:56.400 回答
3

你有没有解决过这个问题?

您是否尝试过使用 CGEventCreateSourceFromEvent(...) 从 CGEventRef 创建 CGEventSourceRef?

于 2012-07-23T15:06:36.953 回答