我正在用C ++编写Mac OS X 10.6及更高版本的应用程序。应用程序的一部分需要模拟鼠标移动和鼠标点击。我目前通过使用CGEvent
发布CGEventPost(kCGHIDEventTap, event);
个对象来执行此操作。
这在很大程度上起作用 - 我可以模拟鼠标移动和点击很好,但在某些方面似乎失败了。例如:
CGEventCreateMouseEvent(...)
创建鼠标事件会使事件在网络浏览器中正常运行。这种不一致是应用程序的边界。可能是什么原因?
答案 0 :(得分:5)
要说服这些应用程序实际生成单击的操作,您需要做的是将鼠标向上事件中“单击状态”字段的值显式设置为1(默认为0)。以下代码将执行此操作:
CGEventSetIntegerValueField(event, kCGMouseEventClickState, 1);
鼠标按下也必须设置为1,但是使用CGEventCreateMouseEvent()而不是CGEventCreate()可以为你完成。
我已经对此进行了测试,它可以在信息中心的“i”按钮和Spotlight搜索结果中使用。
(顺便说一句,如果您正在模拟双击,则需要为第二次点击的鼠标按下和鼠标按下事件将点击状态设置为2。)
答案 1 :(得分:1)
大多数菜单都是使用mouseDown事件激活的。 mouseUp事件后跟踪超链接。 “i”按钮仅在单击鼠标但不是很长时间时有效。 所有这些似乎表明你有一个计时问题,尝试几个按下时间。
答案 2 :(得分:0)
使用OSXVnc。我看到他们使用CGPostMouseEvent()
代替CGPostEvent()
。
答案 3 :(得分:0)
我已经在博客文章 Python Mouse Click and Move Mouse on Apple Mac OS X Snow Leopard 10.6.x 中写了如何做到这一点。