pro magic macbook mac gestos funciona enciende como activar c++ osx events mouse

c++ - magic - trackpad macbook air



Simular clics del mouse en Mac OS X no funciona para algunas aplicaciones (4)

Estoy escribiendo una aplicación para Mac OS X 10.6 y posterior en C ++. Una parte de la aplicación necesita simular el movimiento del mouse y clics del mouse. Lo hago actualmente publicando objetos CGEventPost(kCGHIDEventTap, event); utilizando CGEventPost(kCGHIDEventTap, event); .

Esto funciona, en su mayor parte, puedo simular el movimiento del mouse y clics muy bien, pero parece fallar en algunas áreas. Por ejemplo:

  • En Mozilla Firefox y Safari, puedo hacer clic en todos los menús, pero no puedo hacer clic en un enlace dentro de un sitio web. Cuando intento, el enlace se resalta, pero el navegador nunca sigue el enlace. Sin embargo, puedo hacer clic derecho en un enlace, seleccionar "abrir enlace en una pestaña nueva" y todo funciona como se espera. Resuelto : la creación del evento del mouse con CGEventCreateMouseEvent(...) hace que el evento funcione dentro del navegador web.
  • Puedo hacer clic en el ícono "Panel" para abrir el tablero, pero no puedo hacer clic en el botón "i" en ninguno de los widgets del tablero. Del mismo modo, al hacer clic en cualquiera de los resultados de búsqueda del widget de búsqueda de Spotlight tampoco funciona.

Esta incoherencia se encuentra a lo largo de los límites de la aplicación. ¿Cuál podría ser la causa?


Lo que necesita hacer para convencer a estas aplicaciones de que ha generado un clic es establecer explícitamente el valor del campo "estado de clic" en el evento de mouse up en 1 (por defecto es 0). El siguiente código lo hará:

CGEventSetIntegerValueField(event, kCGMouseEventClickState, 1);

También debe establecerse en 1 para el mouse hacia abajo, pero utilizando CGEventCreateMouseEvent () en lugar de CGEventCreate () que se hace por usted.

He probado esto y funciona en los botones ''i'' en el tablero y en los resultados de búsqueda de Spotlight.

(Por si fuera poco, si estuvieras simulando un doble clic, necesitarías establecer el estado de clic en 2 para el mouse y eventos del segundo clic).



La mayoría de los menús se activan con el evento MouseDown. Los hipervínculos se siguen después del evento mouseUp. El botón "i" solo funciona cuando se hace clic en el mouse pero no hace mucho tiempo. Todo esto parece mostrar que tienes un problema de tiempo, prueba varios tiempos presionados.


Use OSXVnc . Veo que usan CGPostMouseEvent() lugar de CGPostEvent() .