J'écris une application pour Mac OS X 10.6 et plus tard en C ++. Une partie de l'application doit simuler des clics de mouvement et de souris de souris. Je le fais actuellement en postant des objets Cela fonctionne, pour la plupart - je peux simuler le mouvement de la souris et clique simplement bien, mais cela semble échouer dans certaines zones. Par exemple: p>
Cette incohérence est le long des limites des applications. Qu'est-ce qui pourrait être la cause? P> CGEvent code> à l'aide de
cgenventpost (kcghideventtap, événement); code>. P>.
CGEventCreatemousevent (...) code> fait fonctionner l'événement dans le navigateur Web. LI>
4 Réponses :
Utilisez OSXVNC . Je vois qu'ils utilisent cgpostMousevent () code> au lieu de
cgpostevent () code>. P>
CGPostMousevent a été obsolète en 10.6. Merci à la suggestion, mais je préfère utiliser des fonctions obsolètes.
CGPostMousevent () a été remplacé par CGEventCreatemouseevent (). Pourquoi ne pas utiliser ça? développeur.apple.com/mac/library/documentation/carbon/referen CE / ...
Changer de CGEventCreate () à CGEventCreatemouseevent () a fixé le problème de Firefox - WHCIH est étrange, je définit les mêmes paramètres après tout, mais pas la question du tableau de bord.
... Peu importe la fonction que vous utilisez pour créer l'événement, vous devez toujours le poster avec CGPostevent () ...
La raison pour laquelle cela a fonctionné est que cgventCreate () définit l'état de clic sur 0 Toujours i>, alors que cgeventcreatemouseevent () le définit à 1 pour la souris vers le bas et 0 pour la souris. Donc il a fixé une partie du problème.
La plupart des menus sont activés avec l'événement MouseDown. Les hyperliens sont suivis après l'événement MouseUp. Le bouton "I" ne fonctionne que lorsque la souris a été cliquée mais pas une longue période. Tout cela semble montrer que vous avez un problème de synchronisation, essayez plusieurs timings pressés. P>
Cela ressemble à un plomb prometteur. J'ai juste chronométré l'écart entre l'envoi des événements de la souris et de la souris - un clic typique prend 42 ms, ce qui me semble être suffisamment court pour générer un événement de clic plutôt qu'un simple clic ou autre ...
En effet, ce n'est pas un problème de synchronisation. Tant que vous définissez le nombre de clics, tout chronométrage raisonnable fera.
Ce que vous devez faire pour convaincre ces applications que vous avez en fait généré un clic est pour définir explicitement la valeur du champ "Cliquez sur l'état" de l'événement de la souris sur 1 (IT par défaut à 0). Le code suivant le fera:
CGEventSetIntegerValueField(event, kCGMouseEventClickState, 1);
J'ai écrit comment le faire dans le blog post Python Mouse Cliquez et déplacez la souris sur Apple Mac OS X Snow Leopard 10.6.x em>. p>