【问题标题】:How does a mouse driver move the mouse pointer?鼠标驱动程序如何移动鼠标指针?
【发布时间】:2012-12-25 16:36:53
【问题描述】:

这可能是一个奇怪的问题,但是鼠标软件是如何工作的? (特别是在 OSX 上)

如果我想在 OSX 上移动鼠标,我一直在使用以下代码:

CGAssociateMouseAndMouseCursorPosition(0);
CGWarpMouseCursorPosition(point); // point is of type NSPoint
CGAssociateMouseAndMouseCursorPosition (1);

但这会导致光标跳跃(有时甚至会滞后)。鼠标(或触控板)如何使它如此流畅?他们使用什么 API?

同样,如果我使用此代码将光标移动到停靠栏上,例如,停靠栏不会放大(放大已打开),即使通常使用触控板将光标移动到那里也可以正常工作。为什么?

【问题讨论】:

  • 您想模拟用户鼠标移动(可能会触发 UI 上的所有效果)还是想知道操作系统实际如何跟踪、处理和调度鼠标事件?
  • @Thilo 我想模拟它,但正如你所说,它触发的所有 UI 效果和更改,因为我在上面发布的代码模拟了它,但有时只能工作并且不能触发所有 UI 更改。

标签: objective-c macos mouse-cursor


【解决方案1】:

您的问题应该是“鼠标设备驱动程序是如何工作的?”

你应该看看IOKit,尤其是HID family

如果您只想模拟鼠标移动,您也可以尝试使用CGEventCreateMouseEvent 创建鼠标事件,然后使用CGEventPost 发布它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多