用于远程控制鼠标的Apple事件

时间:2010-10-29 11:57:00

标签: cocoa events macos mouse macos-carbon

我甚至不确定从这个问题开始......

我希望能够将鼠标点击事件发送到另一台计算机,就像用户点击了该计算机一样。

我可以通过以下方式在同一台机器上完成:

 CGEventSourceRef source = CGEventSourceCreate(NULL);
 CGEventType eventType = kCGEventLeftMouseDragged;
 CGPoint mouseCursorPosition;
 mouseCursorPosition.x = point.x;
 mouseCursorPosition.y = point.y;
 CGMouseButton mouseButton = kCGMouseButtonLeft;

 CGEventRef mouseEvent = CGEventCreateMouseEvent ( source,
               eventType,
               mouseCursorPosition,
               mouseButton );
 CGEventSetType(mouseEvent, kCGEventLeftMouseDragged); // Fix Apple Bug
 CGEventPost( kCGSessionEventTap, mouseEvent );
 CFRelease(mouseEvent);

但是如何在其他地方发送该事件? AppleScript的?我已经阅读了AppleEvents与app-app通信的一些内容,但我想在另一台机器上生成一个系统事件?

完全不确定。

谢谢,


[编辑11/1/10 7:30a]

只是为了澄清,我不打算屏幕分享。至少我不这么认为。我有几个连接在一起的mac pro集群,每个都有4个监视器。我试图只使用一个设备来向每个节点传达“点击”。因此,如果设备在节点3之上,但设备已插入node0,则node0需要告知节点3它需要响应点击。

谢谢,


[编辑11/4/10 9:32 am]

真的?没有人可以给我一个具体的代码示例,以编程方式生成Apple Events以在C / C ++ / Objc-C中在远程计算机上创建鼠标事件???

4 个答案:

答案 0 :(得分:3)

据我了解,您可以使用Distributed Objects传递Apple Events。

他们可以通过Bonjour在网络上工作。您可以将Apple事件序列化或编码通过网络传递,然后在另一端的计算机上运行帮助应用程序来监听,解码事件并运行它。为简单起见,您可能只想对鼠标点击的坐标进行编码。

我也相信Marcus Zarra在Core Data上的书中有一个使用DO的网络上运行的Core Data应用程序的示例代码。你可能能够看到他做了什么,并做了类似的事情,让你开始。另见Mike Ash的this excellent Q&A on DO

答案 1 :(得分:1)

“系统事件”“应用程序”(实际上只是一个过程)允许使用applescript发送事件:

tell application "System Events"
tell process "Finder"
click at {10, 10}
end tell
end tell

答案 2 :(得分:0)

我将开箱即用,并建议您尝试Synergy,因为它听起来像您正在寻找的。如果没有,因为它是开源代码,看看它可能会让你知道如何继续。

答案 3 :(得分:-1)

这可能会涉及writing a device driver并假装是一只老鼠。