Page 1 sur 1

[R] AutoIT dans une machine virtuelle

Posté : dim. 10 janv. 2010 12:25
par ne0vincent
Bonsoir à tous :)

Alors. J'ai un programme autoIT qui fonctionne parfaitement, mais qui nécessite d'être "logué" sur le poste.
Le verrouillage de la session désactivant tout focus de fenêtres, curseur, etc... Jusque là, c'est normal.

Le but de mon script est de naviguer sur internet et d'effectuer un certain nombres de manips (login compte, clic)

Et l'autre but étant que ce script fonctionne sur un serveur, planqué dans un coin. Session verrouillé, sans écran, sans clavier ni souris.

J'ai donc réfléchie à une petite solution. Je me suis dit que faire tourner l'appli autoIT dans une machine virtuelle type VMware pourrait résoudre le problème, puisque celle-çi ne sera jamais verrouillé.

En théorie un tel truc devrait marcher. Oui devrait, parce que malheureusement ça ne fonctionne pas....

Dès que je verrouille la session du PC hôte, c'est à dire le windows qui fait tourner la machine virtuelle, tout est mis en stand-by sur la machine virtuelle et le script se mets en pause.

Je précise une nouvelle fois que je suis Obligé de verrouiller la session du PC hôte. Le windows de la machine virtuelle, lui, ne l'est pas.

Donc j'aimerai bien trouver une solution à mon petit problème. Peut-être qu'il faudrait ajouter une fonction dans le code pour reprendre le focus. Je ne sais pas. J'ignore complètement ce qu'il se passe quand je verrouille, alors que ce n'est pas le même windows.

Il a aucune raison pour que le script s'arrête.

Merci de votre aide :(

Re: [..] AutoIT dans une machine virtuelle

Posté : dim. 10 janv. 2010 19:25
par Tlem
Avez-vous essayé de faire tourner un autre logiciel dans cette VM avec la session verrouillée ?
Il me semble, de tête que à partir du moment ou la partie graphique est désactivée (session fermée, session verrouillée) que les logiciels exploitant cette partie sont tout simplement mis en attente (a vérifier).

Sinon, quelles types d'opérations votre script est-il sensé faire ?
Avec GUI ou sans GUI ?

Re: [..] AutoIT dans une machine virtuelle

Posté : lun. 11 janv. 2010 11:52
par ne0vincent
Bon alors visiblement le curseur n'est pas désactivé contrairement à ce que je pensais.
l'appli bloque aux niveau des WinWaitActive("Mozilla - Firefox"). Les fenêtres ne sont pas focus et les WinWaitActive sur attente indéfiniement. Le timeout n'est pas applicable dans le contexte de mon code.

Ce qu'il me faudrait c'est une petite boucle du genre :

Code : Tout sélectionner

While (WinWaitActive <> 1)
          Send("!{TAB}")
         Sleep(100)
WEnd
mais ça n'a pas l'air de fonctionner.

Re: [..] AutoIT dans une machine virtuelle

Posté : lun. 11 janv. 2010 15:37
par Tlem
Si la partie graphique est désactivée du fait du verrouillage de la session, je ne vois aucune solution lié aux GUI's.
Est-ce que votre script doit obligatoirement passé par la gestion de fenêtres ?

Re: [..] AutoIT dans une machine virtuelle

Posté : lun. 11 janv. 2010 16:30
par ne0vincent
non non, mon script t'intègre pas d'interface (GUI).
Il agit seulement sur Firefox, quelques MouseClick, etc...

Je reprécise une nouvelle fois que le windows qui fait tourner ce script n'est Pas vérrouillé, puisque c'est la machine virtuelle.

Re: [..] AutoIT dans une machine virtuelle

Posté : lun. 11 janv. 2010 18:32
par Tlem
Heuuu si vous utilisez des MouseClic(), alors vous avez besoin de la partie graphique de votre OS ...

Si la session est verrouillée dans la machine hôte, alors j'ai bien peur que la partie graphique de la machine virtuelle soit désactivée.
Essayez un soft qui affiche des lignes de log quelconque pour voir si ça fonctionne. Si j'en ai le temps je testerais ce soir (c'est pas gagné :roll: ).

Re: [..] AutoIT dans une machine virtuelle

Posté : mar. 12 janv. 2010 00:08
par ne0vincent
Bon j'ai un autre soucie. Concernant le focus des fenêtres je pense avoir résolu le problème.

Je me logue sur une page web => j'accède à la page d'accueil.
l'ennuie c'est qu'une pub apparait de temps à autre sur cette page d'accueil. Fichtre! je m'en serai bien passé.
donc je taff depuis une bonne heure et demi sur un détecteur de pub (concrètement je détecte le pixel noir du lien "fermer" de cette publicité)
Si ce pixel est détecté j'envoie un Mouseclick à cet endroit.

Ca m'oblige à passer par des "threads", 2 processus différents. Un processus correspond à mon code principal et l'autre à la détection de ce pixel noir, à cet endroit précis.

J'essaye de faire ça avec AdlibRegister()/ AdlibUnRegister()

Apparemment ça ne fonctionne pas.

A un moment donné, mes 2 "processus" utilise la même fonction :

Code : Tout sélectionner

 Func Verif_pixel ($a, $b, $color)
            While (PixelGetColor($a, $b) <> $color) ;tant que la pixel n'est pas detecté
                Sleep(200) ;attendre 1ms
            WEnd
 EndFunc
En temps normal, elle fonctionne parfaitement. Sauf que quand les 2 threads l'utilise en même temps. Tout déconne. Du moins la fonction ne termine jamais.

s'il vous plait, éclairez-moi :?

Re: [..] AutoIT dans une machine virtuelle

Posté : mar. 12 janv. 2010 12:24
par Iste
es-ce que, par hasard, le script resterait bloquer sur Verif_pixel() ?
Surement, vu que cette fonction ne laisse pas la main tant qu'elle n'a pas trouvé de pub.

Ne pas mettre de boucle dans les fonction appelées par des Adlib !

Sinon, Addblockplus fait tres bien son boulot pour virer les pub ;)


Par contre, comme vous l'a répéter Tlem encore et encore, quand la session est fermée il n'y a plus de gestion des GUI, donc adieu PixelGetColor() !
Mais si vous y arrivez, n'hésitez pas a partager votre solution !

Re: [..] AutoIT dans une machine virtuelle

Posté : mar. 12 janv. 2010 23:41
par Tlem
Après quelques tests dans Microsoft Virtual PC avec un Windows XP SP2, je peut dire que le déplacement de la souris est parfaitement pris en compte dans la machine virtuelle, que la session de l'hôte soit verrouillée ou non (ca c'est une super bonne nouvelle ...).

Mon test à consisté à faire une ouverture temporisée de MsPaint.exe et à faire un petit dessin sans prétention à coup de MouseMove(). :mrgreen:

Par contre ce test ne fonctionne pas si on verrouille la session du PC ou le script est lancé.

J'en déduit donc :
OS avec session verrouillée + Machine Virtuelle en fonction avec script graphique = Fonctions graphique entièrement gérées dans la VM.

OS avec session verrouillée + Script graphique = Fonctions graphique non gérées.

Re: [..] AutoIT dans une machine virtuelle

Posté : jeu. 14 janv. 2010 01:20
par ne0vincent
Tout est réglé. Ca fonctionne au top ! :D

merci encore.

Re: [R] AutoIT dans une machine virtuelle

Posté : lun. 26 avr. 2010 20:08
par DCVolo
Bonjour,

j'ai un peu le meme soucis, à ce que j'ai compris en gros je vais devoir utiliser le clavier visuel de windows pour mon probleme avec la souris ? o_O


http://www.autoitscript.fr/forum/viewto ... f=3&t=5127