Uri*_*Uri 16 macos objective-c double-click quartz-graphics cgeventtap
我正在使用以下代码来模拟鼠标的单击:
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);
}
Run Code Online (Sandbox Code Playgroud)
我可以使用基本相同的代码来进行控制点击(右键单击),方法是:
kCGEventLeftMouseDown
kCGEventLeftMouseUp
kCGMouseButtonLeft
他们各自的"正确"事件.该函数看起来像:
void RightClick(const CGPoint point)
{
PostMouseEvent(kCGMouseButtonRight, kCGEventMouseMoved, point);
NSLog(@"Click Right");
PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseDown, point);
PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseUp, point);
}
Run Code Online (Sandbox Code Playgroud)
但是,双击怎么样?我尝试发送2个leftclicks并连续两次调用PostMouseEvent()但没有运气.你如何进行双击?
谢谢!
pho*_*bus 17
看看CGEventSetIntegerValueField(event, kCGMouseEventClickState, clickCount).此外,即使将clickCount设置为2,在某些情况下,对于旧版应用,您可能还必须执行2个事件.
所以基本上:
编辑:
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);
}
Run Code Online (Sandbox Code Playgroud)
这是模拟双击的示例代码。
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);
Run Code Online (Sandbox Code Playgroud)
请注意,这CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);是在第一组向下、向上点击之后发生的。
| 归档时间: |
|
| 查看次数: |
8840 次 |
| 最近记录: |