Page 1 sur 1

[R] Plusieurs tâches à la fois

Posté : jeu. 18 févr. 2010 19:15
par manzarek
Bonjour, :mrgreen:
est il possible d'exécuter plusieurs tache a la fois?

Je m'explique:
J'ai un script qui permet de visualiser le bureau de quelqu'un a distance
Mais il est dans un boucle de type while 1
Et J'ai un script qui verifie si les hotes ne se déconnecte pas et sinon les retire de la liste (Ca fait trojan mais c'est pas ca ^^) :P


Est possible d'utiliser le script pour voir le bureau sur 2 personne a la fois et continuer a vérifier si personne ne se déconnecte?
Car une fois que j'aurai lancé sur la premier personne je serai dans la boucle et je ne pourrait pas le lancé sur une autres personnes.

Je sais pas si ce que je dit est compréhensible. :roll:
Je cherche un peu a faire comme les timers de visual basic en gros.

Merci de me mettre sur la voie :D

Re: [..]Plusieurs taches a la fois

Posté : jeu. 18 févr. 2010 19:20
par matwachich
Salut!
Déjà, pour verifier si ya pas de déconnexion tu as (Cherche dans la doc.)

Code : Tout sélectionner

AdlibRegister ( "function" [, time] )


Pour voir 2 pc en même temps, je sais pas si c'est possible dans un seul script (ce qui m'étonerai vu qu'autoit ne supporte pas le multithread) mais si c'était moi j'aurai tout simplement lancé le script 2 fois!

Re: [..]Plusieurs taches a la fois

Posté : jeu. 18 févr. 2010 20:45
par manzarek
J'ai une idée si j'ouvre 2 fenetre qui permette de regarder le bureau

une appelé "screen1"
l'autre "screen2"

Et remplacer la boucle while 1 par While WinWaitActive("screen1") et While WinWaitActive("screen1")

Les deux ne seront pas active en même temps mais je pourrai les laissé toute les deux ouverte et passer de une a l'autre.

Je vais essayer ca je ne met pas résolu tout de suite

Re: [..]Plusieurs taches a la fois

Posté : jeu. 18 févr. 2010 21:15
par Tlem
Certes, AutoIt n'est pas multithread, mais AdlibRegister() permet de faire comme si et puis il faudrait voir de quelle manière vous procédez pour afficher le bureau de l'utilisateur car il n'est pas besoin d'être multithread pour afficher plusieurs fenêtres. ;)

Re: [..]Plusieurs taches a la fois

Posté : jeu. 18 févr. 2010 21:24
par manzarek

Code : Tout sélectionner

While 1
        Sleep(50)
        Local $k = TCPRecv($TCPConnect,20000000,0)
        If @error Then
            ConsoleWrite("Lost sock!" & @CRLF)
            ExitLoop
        EndIf
        If $k Then
            $TCPRecv = $TCPRecv & $k
            If BinaryLen($TCPRecv)<4 Then ContinueLoop
            ;ConsoleWrite(BinaryLen($TCPRecv) & " / " & Bin2Num(BinaryMid($TCPRecv,1,4))+4&@CRLF)
            If BinaryLen($TCPRecv)>=Bin2Num(BinaryMid($TCPRecv,1,4))+4 And Bin2Num(BinaryMid($TCPRecv,1,4))+4>0 Then
            ;   ConsoleWrite("Done!" & @CRLF)
                $ScreenshotHandle = FileOpen($ScreenshotName, 18)
                FileWrite($ScreenshotHandle, BinaryMid($TCPRecv,5))
                FileClose($ScreenshotHandle)
                $hBitmap = _GDIPlus_BitmapCreateFromFile($ScreenshotName)
                _GDIPlus_GraphicsDrawImageRect ($hGraphic, $hBitmap,0,0,1024,768)
                _GDIPlus_BitmapDispose ($hBitmap)
                FileDelete($ScreenshotName)
                WinSetTitle($hGUI,"" , BinaryLen($TCPRecv)-4&" at "& Round(1/(TimerDiff($timer)/1000),2)&" fps")
                $TCPRecv=BinaryMid($TCPRecv,5+Bin2Num(BinaryMid($TCPRecv,1,4)))
                $timer = TimerInit()
            EndIf
        EndIf
    WEnd
voici la partie qui affiche le bureau une fois dans la boucle on ne peut plus en sortir a moins de quitter

Re: [..]Plusieurs taches a la fois

Posté : jeu. 18 févr. 2010 21:36
par Tlem
Oui, une fois dans la boucle While, vous ne pouvez en sortir que par le ExitLoop, mais au même titre que While/Wend fait une boucle infinie, un AdlibRegister() est capable de faire la même chose. ;)

Donc bien organisé, vous pourriez faire une fonction qui regroupe les commande essentielles puis une fonction adaptée pour chacun des bureaux que vous voulez surveiller.
Il faudra passer par des arguments et des variables locales, mais je pense que cela devrait être possible sans le multitâche (il suffit d'équilibrer le temps impartit à chaque AdlibRegister()). ;)

Re: [..]Plusieurs taches a la fois

Posté : ven. 19 févr. 2010 13:28
par manzarek
Merci beaucoup je vais me débrouiller avec les adlibregister.
Je vais mettre résolu.
Je vais recoder mon remote desktop depuis le début


Voici ce que j'ai commencer si ca interresse quelq'un: