代码之家  ›  专栏  ›  技术社区  ›  Thomi

在Mac OS X上模拟鼠标点击对某些应用程序不起作用

  •  7
  • Thomi  · 技术社区  · 16 年前

    我正在编写一个应用程序,用于Mac OS X 10.6和以后的C++。应用程序的一部分需要模拟鼠标移动和鼠标单击。我现在是通过发帖来实现的 CGEvent CGEventPost(kCGHIDEventTap, event);

    这在很大程度上是可行的——我可以很好地模拟鼠标移动和点击,但在某些方面似乎失败了。例如:

    • 解决了的 CGEventCreateMouseEvent(...) 使事件在web浏览器中工作。
    • 我可以点击“Dashboard”图标来打开仪表板,但我不能点击任何仪表板小部件上的“I”按钮。类似地,单击spotlight search小部件中的任何搜索结果也不起作用。

    这种不一致是沿着应用程序边界的。原因可能是什么?

    4 回复  |  直到 16 年前
        1
  •  6
  •   Nick Moore Wain    16 年前

    要使这些应用程序确信您实际上已经生成了单击,您需要做的是显式地将鼠标向上事件上的“单击状态”字段的值设置为1(默认为0)。以下代码将执行此操作:

    CGEventSetIntegerValueField(event, kCGMouseEventClickState, 1);
    

    还必须将鼠标按下时的值设置为1,但要使用CGEventCreateMouseEvent()而不是为您完成的CGEventCreate()。

    (另一方面,如果模拟双击,则需要将第二次单击的鼠标下移和鼠标上移事件的单击状态设置为2。)

        2
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    14 年前

    所有这些似乎都表明您有计时问题,请尝试按几次计时。

        3
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    14 年前

    使用 OSXVnc CGPostMouseEvent() CGPostEvent() .

        4
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    14 年前