Page 1 sur 1
[R] Plusieurs tâches à la fois
Posté : jeu. 18 févr. 2010 19:15
par manzarek
Bonjour,
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 ^^)
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.
Je cherche un peu a faire comme les timers de visual basic en gros.
Merci de me mettre sur la voie

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.)
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: