Pergunta

Eu estou usando o seguinte código para simular um clique do mouse:

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);
}

Eu posso usar basicamente o mesmo código para fazer um controle do mouse (clique direito), alterando:

kCGEventLeftMouseDown

kCGEventLeftMouseUp

kCGMouseButtonLeft

para seus respectivos eventos "direito". A função é algo como:

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

Mas, e quanto a um duplo clique? Eu tentei enviar 2 leftclicks e chamando PostMouseEvent () duas vezes seguidas, mas sem sorte. Como você executar um duplo clique?

Obrigado!

Foi útil?

Solução

Olhe em CGEventSetIntegerValueField(event, kCGMouseEventClickState, clickCount). Além disso, mesmo depois de definir o clickCount a 2, você pode ter que executar 2 eventos em alguns casos, para aplicações legadas.

Então, basicamente:

  1. Criar evento
  2. Set clique contagem para 2
  3. Definir tipo de evento para mouseDown e enviá
  4. Definir tipo de evento para mouseup e enviar
  5. Repita 3 e 4

Editar:

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); 
}

Outras dicas

Este é o código de exemplo para simular um clique duplo.

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); 

Observe que CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);goes após o primeiro conjunto de baixo, para cima cliques.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top