模拟MouseEvent无法正常运行OSX

时间:2013-03-04 04:08:55

标签: macos cocoa mouseevent mouseover simulation

早在2010年,Pierre提出this问题(他接受的答案对我不起作用)。

我遇到了同样的问题:我能够以编程方式从我的Cocoa应用程序中成功移动鼠标(并关闭!?!),但是将鼠标移到我的Dock的位置并没有显示它(以及其他一些应用程序未注册鼠标移动事件,例如删除鼠标的游戏)

我正在使用的方法是:

void PostMouseEvent(CGMouseButton button, CGEventType type, const CGPoint point)
{
  CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, point, button);
  CGEventSetType(theEvent, type);
  CGEventPost(kCGSessionEventTap, theEvent);
  CFRelease(theEvent);
}

然后当我想移动鼠标时,我跑了:

PostMouseEvent(0, kCGEventMouseMoved, mouseLocation);

请注意,此代码会为链接等内容生成鼠标悬停事件。

现在是2013年,是否有可能解决这个问题?

谢谢你的时间!

2 个答案:

答案 0 :(得分:3)

我会扭曲光标并生成鼠标移动事件。我从经验中知道,例如,扭曲光标,虽然它本身不生成事件,但修改后续鼠标移动事件以包括其鼠标增量中的移动距离。我不知道你的合成移动事件是否会包含适当的delta值。

答案 1 :(得分:0)

好的,显然MacOSX需要将鼠标放在屏幕的边缘才能显示底座! 因为我将我的底座放在屏幕的左侧(由于许多程序将重要按钮保持在窗口的底部),我所要做的只是说

if (mouseLocation.x < 0)
{
    mouseLocation.x = 0;
}

它有效!

我也在使用KenThomases的想法来扭曲光标。

(这个答案标记正确,因为它允许我显示停靠点 - 但仍然有一些应用程序没有响应鼠标输入)