2013-03-04 62 views
6

早在2010年,Pierrethis问题(他接受的答案不适用于我)。模拟MouseEvent不能正常工作OSX

我遇到了同样的问题:我能够成功地从我的Cocoa应用程序中以编程方式移动鼠标(并关闭!?!),但将鼠标移动到我的扩展坞的位置时不显示它(和其他一些应用程序不注册鼠标移动事件,如游戏,删除鼠标。)

我使用的方法是这样的:

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年,是否有可能解决这个问题?

谢谢你的时间!

回答

0

好吧,显然MacOSX需要鼠标正好处于屏幕边缘才能显示! 因为我把我在屏幕的左侧码头(由于许多程序保持重要的按钮在窗户的底部),所有我必须做的是说

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

和它的工作!

我也使用KenThomases'的想法翘曲光标也是如此。

(此答案被标记正确的,因为它可以让我展现了被告席 - 但是仍然有一些不响应鼠标输入的应用程序)

+0

您应该考虑屏幕的其他边缘。而且,对于多台显示器,屏幕的原点可能具有负面分量。 – 2013-03-16 22:27:42

+0

是的,会做。 好的,我不知道有关额外的显示器......谢谢! (我的项目将使用额外的显示器......幸运的你告诉我了!​​) – 2013-03-17 06:25:21

3

我会扭曲光标并生成鼠标移动事件。例如,我从经验中知道,翘曲光标(虽然它本身不生成事件)会修改随后的鼠标移动事件,以将移动的距离包括在其鼠标三角洲中。我不知道您的合成移动事件是否会自行包含适当的增量值。

+1

添加'CGWarpMouseCursorPosition(点);'在PostMouseEvent底部方法没有帮助 - 这是你的意思吗? – 2013-03-16 10:27:26

+1

如果触摸屏幕边缘,添加它可将鼠标传送到(0,0)。 – 2013-03-16 10:34:07

+1

那么,在发布事件之前我会扭曲,因为扭曲会在下一个事件中增加三角。如果那不是您指定的点,不能告诉您为什么它会到(0,0)。 – 2013-03-16 10:50:34