Выполнение двойного щелчка с помощью CGEventCreateMouseEvent()
Я использую следующий код для имитации щелчка мыши:
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);
}
Но как насчет двойного щелчка?
Я попытался отправить 2 leftclicks и вызывать PostMouseEvent() дважды подряд, но не повезло.
Как вы выполняете двойной щелчок?
спасибо!
Ответы
Ответ 1
Посмотрите CGEventSetIntegerValueField(event, kCGMouseEventClickState, clickCount)
. Кроме того, даже после установки clickCount на 2 вам может потребоваться выполнить 2 события в некоторых случаях для устаревших приложений.
Итак, в основном:
- Создать событие
- Установите количество кликов на 2
- Установить тип события в mousedown и отправить
- Задайте тип события для мыши и отправьте
- Повторите 3 и 4
Edit:
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);
}
Ответ 2
Это пример кода для имитации двойного щелчка.
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);
идет после первого набора вниз, вверх кликов.