执行双击使用CGEventCreateMouseEvent()
-
18-09-2019 - |
题
我使用了下列代码模拟的点击鼠标:
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个事件在某些情况下,对于遗产的应用程序。
所以基本上:
- 创造的事件
- 集的点击数为2
- 设置事件的类型来mousedown和发送
- 设置事件的类型来mouseup和发送
- 重复,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。
不隶属于 StackOverflow