2010-08-28 10 views
3

J'ai écrit un outil C# qui simule un utilisateur interagissant avec un environnement Windows 7. Cela fonctionne sauf lorsque vous interagissez avec un couple d'applications flash en ligne. Les mouvements de la souris et les clics sont générés, mais les applications Flash ne les reçoivent pas. Je pense que j'ai besoin de générer des événements de souris de niveau inférieur, mais je ne peux pas le confirmer.Problème d'automatisation de la souris et d'interaction avec les applications Flash

J'ai essayé plusieurs mécanismes différents:

[DllImport("user32.dll")] 
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); 

[DllImport("user32.dll", SetLastError = true)] 
private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize); 

Quelqu'un at-il rencontré ce problème? Des idées comment je peux générer des événements de souris qui s'inscriraient avec une application Flash?

Mise à jour: Il semble que les applications flash reçoivent un clic de souris. Leurs animations de clic sont présentées lorsqu'un clic de souris est envoyé par l'application C#. Pourtant, il ne se passe rien, même si l'animation du clic de souris de l'application Flash s'affiche.

+1

Les applications flash dans Windows Internet Explorer? Gardez à l'esprit que le mode protégé (http://www.microsoft.com/india/windows/windows-vista/features/IE7-protected-mode.aspx) signifie que les messages de fenêtre vers/depuis le processus IE sont affectés, être ce qui cause le problème. Est-ce que des événements de la souris vers des éléments de la page qui ne sont pas * le * contrôle flash fonctionnent? – Rob

+1

Je l'ai testé dans IE8 et le dernier Chrome. Dans chacun, j'ai envoyé des événements de souris à des liens non-Flash sur quelques pages et ils ont été traités par les navigateurs. – TERACytE

+0

qu'est-ce que vous essayez de faire spécifiquement à travers le flash? il y a des problèmes d'interaction spécifiques avec les navigateurs, donc dans les bloqueurs de fenêtres contextuelles construites, etc., les tentatives d'ouverture de pages seront supprimées, sauf après une interaction de l'utilisateur. Je ne suis pas sûr de la façon dont il traite cela, mais il se peut que vos clics ne soient pas enregistrés en tant qu'entrée «humaine», donc bloqués. – longstaff

Répondre

1

Différentes applications flash répondent aux différents mouse_events. Avez-vous essayé d'envoyer mousedown, mouseup, etc? En outre, vous devrez parfois utiliser mousemove en premier. J'ai vu quelques applications flash où certains boutons fonctionnent par mousedown et d'autres par mouseup. Envisagez également de désactiver le clavier et la souris juste avant d'envoyer les événements et de les réactiver après.

0

Essayez également de masquer le pointeur de la souris et de surveiller les cordons du pointeur de la souris (x & Y) dans une zone de texte en essayant Event.ENTER_FRAME simple. Je pense que le problème est avec le navigateur, pas l'application flash réelle. Le navigateur que vous utilisez pour l'affichage flash, je pense qu'il doit avoir des propriétés qui permettent de capturer les données de la souris par Flash.

1

J'ai rencontré exactement le même problème. la solution que j'ai trouvé était de ne pas utiliser le mode absolu lors de l'appel SendInput, et à la place, n'utiliser que relatif. Cela met plus de travail dans votre code (vous avez besoin d'écrire du code d'interpolation), mais fait en sorte que le code de détection de passage de la frontière en flash soit renvoyé.

En outre, si vous déplacez le pointeur sur le même fil que l'application flash (par exemple dans un contrôle du navigateur), assurez-vous de Application.DoEen