我使用了下列代码模拟的点击鼠标:

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

void LeftClick(const CGPoint point) 
{
 PostMouseEvent(kCGMouseButtonLeft, kCGEventMouseMoved, point);
 NSLog(@"Click!");
 PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseDown, point);
 PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseUp, point);
}

我可以使用基本上相同的代码做一个控制点击(右击)通过改变:

kCGEventLeftMouseDown

kCGEventLeftMouseUp

kCGMouseButtonLeft

他们各自的"正确"的事件。功能看起来是这样的:

void RightClick(const CGPoint point) 
{
 PostMouseEvent(kCGMouseButtonRight, kCGEventMouseMoved, point);
 NSLog(@"Click Right");
 PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseDown, point);
 PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseUp, point);
}

但是,如何约双击?我试图发送2leftclicks并呼吁PostMouseEvent()连续两次,但未成功。你如何执行一个双击?

谢谢!

有帮助吗?

解决方案

看看 CGEventSetIntegerValueField(event, kCGMouseEventClickState, clickCount).此外,甚至是在设定之后的clickCount2,可能需要执行的2个事件在某些情况下,对于遗产的应用程序。

所以基本上:

  1. 创造的事件
  2. 集的点击数为2
  3. 设置事件的类型来mousedown和发送
  4. 设置事件的类型来mouseup和发送
  5. 重复,3和4

编辑:

void doubleClick(int clickCount) {
    CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, point, kCGMouseButtonLeft);  
    CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, clickCount);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseUp);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseDown);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseUp); 
    CGEventPost(kCGHIDEventTap, theEvent); 
    CFRelease(theEvent); 
}

其他提示

这是示例代码来模拟双击

CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, CGPointMake(x, y), kCGMouseButtonLeft);  
CGEventPost(kCGHIDEventTap, theEvent);  
CGEventSetType(theEvent, kCGEventLeftMouseUp);  
CGEventPost(kCGHIDEventTap, theEvent);  

CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);

CGEventSetType(theEvent, kCGEventLeftMouseDown);  
CGEventPost(kCGHIDEventTap, theEvent);  

CGEventSetType(theEvent, kCGEventLeftMouseUp); 
CGEventPost(kCGHIDEventTap, theEvent); 

CFRelease(theEvent); 

请注意,所述第一组向下,向上的点击后CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);goes。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top