Autoit

Fermé
Xavier -  
 Xavier591 -
Bonjour,

J'ai quelques souci sur Autoit et je voudrais de l'aide :')
S'il vous plaît, épargnez moi vos commentaire "Tu veut faire quoi ? Un bot ? Non, on ne t'aideras pas " car ce n'est pas dans ce but ... !

Tout d'abord, j'ai un problème pour redimenssionner une page web, normalement ça devrait être un truc du genre :

Run ( "C:\Program Files\Mozilla Firefox\firefox.exe")
 WinWaitActive("C:\Program Files\Mozilla Firefox\firefox.exe")
 WinMove("[CLASS:firefox.exe]","",30,30,400,600) ; ici, Redimensionner ma page internet


Pourtant, ma page internet ne se redimensionne pas :(

Ensuite, je voudrais que le script trouve un text, le localise, puis clique dessus. Malheureusement, je ne trouve pas comment faire :/

Enfin, et prenons un exemple concret, si je voulais que mon script envoie un mail et que je ne voulais pas voir, ma souris bouger, internet s'executer, mais que tous ça se passe au niveau du processeur et que je ne voie rien, comment devrais je faire ? Faut-il télécharger un add-on ou carrément programmer avec du C ou un autre language ?

Merci d'avance
Xavier

5 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut,

    WinWaitActive doit comporter en premier argument le titre de la fenêtre, ou un autre identifiant accepté par AutoIt. Pas de chemin vers un exécutable : https://www.autoitscript.com/autoit3/docs/functions/WinWaitActive.htm

    Tu devrais examiner les valeurs de retour des fonctions, pour vérifier si elles ont été exécutées avec succès.

    Pour envoyer un e-mail, vois _INetSmtpMail : https://www.autoitscript.com/autoit3/docs/libfunctions/_INetSmtpMail.htm

    Pour localiser un texte et cliquer dessus, je suppose que tu parles d'un texte dans la page du navigateur. Je ne crois pas que l'on puisse faire cela avec AutoIt. Tu peux en revanche rechercher des pixels d'une certaine couleur dans une zone de l'écran et simuler des clicks.

    Voilà un exemple corrigé de ton code ci-dessus.

    Opt("WinTitleMatchMode", 2)  ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
    
    $res = Run("C:\Program Files\Mozilla Firefox\firefox.exe")
    If $res == 0 Then
        MsgBox(4096, "Error", "Could not start Firefox")
        Exit
     Else
       $res = WinWaitActive("Mozilla Firefox", "", 10)
       If $res == 0 Then
    	  MsgBox(4096, "Error", "Could not find and get focus on Firefox window")
    	  Exit
       Else
    	  $res = WinMove("Mozilla Firefox","",30,30,400,600) ; ici, Redimensionner ma page internet
    	  If $res == 0 Then
    		 MsgBox(4096, "Error", "Could not move the Firefox window")
    		 Exit
    	  Else
    		 MsgBox(4096, "Info", "all is done, without errors")
    	  EndIf
       EndIf
    EndIf

    Opt("WinTitleMatchMode", 2) s'assure que ton argument de recherche de titre va matcher aussi si tu tapes une partie du titre.

    Si tu veux utiliser des noms de "CLASS" au lieu du titre de la fenêtre pour localiser tes fenêtres, tu ne peux pas inventer un nom qui te passe par la tête. Tu dois déterminer quel est ce nom pour la fenêtre en question. Tu peux faire cela avec l'outil "AutoIt Window Info" qui est installé avec AutoIt.

    Dal
    0
    1. Xavier59
       
      Merci beaucoup de votre réponse.
      J'ai pas mal de problème avec autoIT et je sens que vous allez beaucoup m'aider.
      Bon, la mes parents me demande ( déjà ) d'allez au lit, j'essaierai donc plus en détails tout cela demain et vous direz comment ça marche (;
      Merci encore !
      0
  2. Xavier59
     
    Bonjour,

    Voilà le programme ( pas terminé evidemment ) :
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate(":) Script By Destro", 345, 254, 317, 200)
    $Button1 = GUICtrlCreateButton("&OK", 168, 225, 75, 25)
    $Button2 = GUICtrlCreateButton("&Cancel", 256, 225, 75, 25)
    $Radio1 = GUICtrlCreateRadio("X", 64, 56, 55, 17) ; Séléction
    $Radio2 = GUICtrlCreateRadio("XX", 208, 56, 55, 17) ; Séléction
    $Pseudo = GUICtrlCreateInput("Pseudo", 104, 88, 121, 21) ; Pseudo
    $Mdp = GUICtrlCreateInput("Mot de passe", 104, 112, 121, 21) ; Mot de passe
    $Pic1 = GUICtrlCreatePic("C:\Users\Moi\Downloads\page-secrete-1.jpg", 0, 0, 609, 441)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    $Radio1 = 0 And $Radio2 = 0
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $Button2
    			Exit
    		Case $Radio1
    			$Radio1 = 1
    			$Radio2 = 0
    		Case $Radio2
    			$Radio1 = 0
    			$Radio2 = 1
    		Case $Button1
    			MsgBox(4096, "Info", "all is good")
    			ExitLoop
    	EndSwitch
    WEnd
    
    
    Opt("WinTitleMatchMode", 2)  ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
    
    $res = Run("C:\Program Files\Mozilla Firefox\firefox.exe")
    If $res == 0 Then
        MsgBox(4096, "Error", "Could not start Firefox")
        Exit
     Else
       $res = WinWaitActive("Mozilla Firefox", "", 10)
       If $res == 0 Then
    	  MsgBox(4096, "Error", "Could not find and get focus on Firefox window")
    	  Exit
       Else
    	  $res = WinMove("Mozilla Firefox","",100,30,1100,700) ; ici, Redimensionner ma page internet
    	  If $res == 0 Then
    		 MsgBox(4096, "Error", "Could not move the Firefox window")
    		 Exit
    	  Else
    		 MsgBox(4096, "Info", "all is done, without errors")
    	  EndIf
       EndIf
    EndIf
    Sleep (1000)
    MouseClick ( "left", 315, 125)
    Send ("xxx.fr {ENTER}")
    Sleep (3500)
    If $Radio1 = 1 Then
    	MouseClick ( "left", 936, 254)
    EndIf
    If $Radio2 = 1 Then
    	MouseClick ("left", 1030, 255)
    EndIf
    
    MouseClick ("left", 951, 283)
    Sleep (500)
    Send ($Pseudo) ; Le pseudo est entrée
    Sleep (500)
    MouseClick ("left", 951, 314) ; Double
    Sleep (200)
    MouseClick ("left", 951, 314) ; Clic
    Sleep (500)
    Send ($Mdp) ; Le mot de passe est entrée
    MouseClick ("left", 1001, 344)
    Sleep (2000)
    


    Bon, le probème, c'est quand je demande que le programme écrive le Mdp et le Pseudo (normalement) stocker dans les variables $Pseudo et $Mdp ... ben ... ça marche pas :(
    Auriez vous une solution.
    Merci d'avance.
    0
  3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut Xavier59,

    Pour accéder à la barre d'adresse envoie Alt-D à Firefox, plutôt que de cliquer sur des coordonnées où tu penses que peut se trouver celle-ci.

    AutoIt n'est pas vraiment fait pour accéder au contenu de pages Web.

    Pour accéder à des formulaires, cependant, là aussi au lieu de cliquer, tu pourrais envoyer des tabulations, jusqu'à ce que tu sois sensé tomber sur le bon formulaire (compte le nombre de tabulations nécessaires depuis le stade postérieur à la validation de l'adresse).

    Il y a des outils plus adaptés que AutoIt pour intéragir avec un site Web ou le contenu d'une page Web. AutoIt est fait pour intéragir avec des contrôles Windows.

    Si tu nous dit ce que tu veux faire, on pourra peut-être te guider.

    Dal
    0
    1. Xavier59
       
      Bonjour,

      Je voudrais devenir informaticien, bref, j'ai 14 ans, et ce language m'interesse. Donc je m'y suis lancé. Je voudrais automatiser des actions. Par exemple, comme je suis un flemmard, je voudrais que le script quand je clique dessus, ouvre internet et me connecte à Hotmail. Je sais bien qu'il doit bien exister des logiciels pour faire ça, mais je veut le faire tout seul (:
      Et puis, si je fait rien, je serais toujours nul et je ne m'améliorerais pas. Donc, comme toute personne, je passe par la case " noobie " et y a pas de honte :D

      Ce pourquoi j'ai demander de pouvoir faire " Winmove" c'est parceque j'ai lu qu'il fallait donner une valeur a la page pour pouvoir faire les clics, car si je mets en téléchargement le " logiciel ", les personnes qui n'aurait pas la même grandeur d'écran ... ça ne marcherai pas. L'histoire des tabulations et pas mal aussi, mais pour cliquez sur des liens.... je vais avoir du mal x)

      Sinon, quel est le moyen pour stocker l'info de mon inputbox de mail et de mdp.

      Merci d'avance.
      0
    2. Xavier59
       
      Bon j'ai un peu essayé votre message du "TAB" ça m'a l'air pas trop mal, seulement, l'élément que je veut atteindre est un lien qui est en javascript, et donc, du coup, ça ne marche pas...
      Donc à part le "clic souris" j'ai une autre solution ? :')
      0
    3. Xavier59
       
      Bon, pour l'inputbox, j'ai finit par réussir, c'était plutot facile finalement ( surtout avec l'aide d'un forum :p )
      Bon désolé de polluer hein ....
      0
    4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Bravo, tu avances visiblement :-)

      Si ton but est d'apprendre la programmation sur un exemple, pourquoi pas AutoIt.

      Pour intéragir avec une page, comme tu utilises Firefox, un outil comme Selenium IDE peut cependant être beaucoup plus adapté : https://www.selenium.dev/projects/ et facile à mettre en oeuvre avec ses fonctions d'enregistrement et de play-back.


      Dal
      0
    5. Xavier59
       
      Oui, mon programme avance bien, on peut maintenant, mettre sur "pause", "quittez" et j'ai mis en place votre "alt + D" pour l'url
      Bon je vais regarder de ce côté.
      Je vais essayer de comprendre un peu "Selenium IDE" qui m'a l'air un peu compliqué, surtout que le site est en anglais, mais je vais regarder ce que je trouve dessus sur google et essayé de traduire (un peu), vu que je veut surtout pas qu'on me mache le travail :)
      Merci, si vous avez d'autres infos utiles à me communiquer, je suis prenenur !
      0
  4. Xavier59
     
    Je voudrais savoir si ce code "pourrait", eventuellement, fonctionné.
    Le script chercherait la couleur d'un pixel sur la page web.
    Le voici, j'espère que vous le comprendrez ( et qu'il n'y a pas trop d'erreur ... mais bon, un script ne fonctionne jamais du premier coup !! )

    $Searchx = 100 ; Absisse
    $Searchy = 140 ; Ordonnée
    
    While
    $Searchx + 10 = $Searchx ;La recherche en abscisse prend + 10
    
    If $Searchx = 1170 Then
    	$Searchy + 10 = $Searchy ; Si l'abscisse et de 1170, l'ordonnée gagne 10 et l'abscisse reviens a 0
    	$Searchx = 0
    EndIf
    
    
    $FindPixel = PixelSearch ($Searchx,$Searchy,$Searchx + 10, $Searchy + 10, 159:125:88 )
    
    If $FindPixel = 1 Then
    	MsgBox (4096, "Info", "Pixel trouvé")
    Endif
    	
    
    If $Searchx = 1170 And $Searchy = 720 Then
    	MsgBox (4096, "Erreur", "Erreur pixel nons trouvé")
    EndIf
    	
    WEnd


    Merci d'avance (:
    0
    1. Xavier59
       
      Bon j'ai un peu corrigez tous ça, mais ça ne marche toujours pas ...

      $Searchx = 100 ; Absisce
      $Searchy = 140 ; Ordonnée
      
      While 2
      $Searchx = $Searchx + 10 ;La recherche en abscisse prend + 10
      
      If $Searchx = 1170 Then
      	$Searchy = $Searchy + 10
      	$Searchx = 0
      EndIf
      
      $FindPixel = PixelSearch ($Searchx,$Searchy,$Searchx + 10, $Searchy + 10, 0xFFE3BB)
      
      If $FindPixel = 1 Then
      	MsgBox (4096, "Info", "Pixel trouvé")
      EndIf
      
      If $Searchx = 1170 And $Searchy = 720 Then
      	MsgBox (4096, "Erreur", "Erreur pixel nons trouvé")
      EndIf
      WEnd


      Y a jamais de messages qui apparait malheureusement :(
      Ou est ma faute s'il vous plait ?
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Salut Xavier,

      PixelSearch utilise @error pour déterminer si la fonction a trouvé le pixel ou pas, et si le pixel a été trouvé, ses coordonnées sont renvoyées dans un tableau.

      https://www.autoitscript.com/autoit3/docs/functions/PixelSearch.htm

      Local $coord = PixelSearch($Searchx,$Searchy,$Searchx + 10, $Searchy + 10, 0xFFE3BB)
      If Not @error Then
          MsgBox (4096, "Info", "Pixel trouvé aux coordonnées : " & $coord[0] & "," & $coord[1])
      EndIf
      

      (code adapté de celui présenté dans la documentation ci-dessus)

      De plus, tu crées une boucle infinie en faisant "While 2" (https://www.autoitscript.com/autoit3/docs/keywords/While.htm). Il faudrait que tu en sortes d'une façon ou d'une autre.

      Par exemple, lorsque $Searchy atteint une certaine valeur, utiliser ExitLoop te permettrait de sortir du While

      https://www.autoitscript.com/autoit3/docs/keywords/ExitLoop.htm

      Sinon, tu vas te retrouver à scanner des zones de l'écran qui n'existent pas.

      Cela dit, tu ferais mieux de réduire le champ de la recherche, si tu peux... comme conseillé par la doc de PixelSearch.

      La documentation de AutoIt est bien faite, elle comporte des exemples pour chaque fonctions. C'est en anglais, mais si tu veux apprendre à programmer, il va falloir t'y mettre (et ce n'est pas si compliqué l'anglais informatique).


      Dal
      0
    3. Xavier591
       
      Merci beaucoup à vous, j'ai énormément avancé depuis et j'ai été capable de créer quelques logiciels avec Autoit que j'ai mis en ligne.
      Néamoins, il me reste encore un problème, justement avec la fonction PixelSearch()
      J'avais vu dans un logiciel fait à l'aide d'autoit, que l'utilisateurs pouvais définir la zone de recherche à l'aide d'un rectangle vert. Cela enregistrer le rectangle qu'il allait définir pour PixelSearch(). Mais après avoir recherché sur Internet, je n'ai pas trouvé le code !(
      Le connaissez vous ?
      Merci
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Xavier591
     
    -------------------------------------------------------------------------

    AutoIt Version: 3.3.8.1
    Author: myName

    Script Function:
    Template AutoIt script.

    #ce ----------------------------------------------------------------------------

    ; Script Start - Add your code below here

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("DARKOBIT BOT", 224, 305, 268, 121)
    $InputShield = GUICtrlCreateInput("1-10", 136, 64, 65, 24)
    $InputHP = GUICtrlCreateInput("1-10", 136, 96, 65, 24)
    $InputLife = GUICtrlCreateInput("1-10", 136, 128, 65, 24)
    $Label1 = GUICtrlCreateLabel("Shield Button", 16, 56, 82, 20)
    $Label2 = GUICtrlCreateLabel("HP Button", 16, 96, 63, 20)
    $Label3 = GUICtrlCreateLabel("Reparation Button", 16, 136, 111, 20)
    $Label4 = GUICtrlCreateLabel("BOT EPAVE BY DESTRO", 16, 16, 191, 20)
    $Hotkey = GUICtrlCreateLabel("Hotkey", 80, 168, 55, 20)
    $Label5 = GUICtrlCreateLabel("Start : S", 8, 200, 49, 20)
    $Label6 = GUICtrlCreateLabel("Pause : P", 72, 200, 61, 20)
    $Label7 = GUICtrlCreateLabel("Stop : ESC", 144, 200, 68, 20)
    $Save = GUICtrlCreateButton("Save", 56, 240, 123, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Save
    $Shield = GUICtrlRead($InputShield)
    $HP = GUICtrlRead($InputHP)
    $Life = GUICtrlRead($InputLife)
    GUIDelete("DARKOBIT BOT")
    ExitLoop
    EndSwitch
    WEnd

    Global $Request
    HotKeySet ("p", "Pause")
    HotKeySet ("s", "Start")
    HotKeySet ("{ESC}", "Stop")

    Sleep (100000000)
    MsgBox(4096,"Hey :D", "Hey, wake up ! Hotkey : S for start")

    Func Pause()
    $Request = Not $Request
    While $Request
    Sleep(100)
    WEnd
    EndFunc

    Func Start()

    $Sleep1 = 1
    $Sleep2 = 3
    $Sleep3 = 4
    $Time = 0

    While 1

    If $Sleep1 = 1 Then
    Send ($Shield)
    $Sleep1 = 0
    EndIf

    If $Sleep2 = 3 Then
    Send ($HP)
    $Sleep2 = 0
    EndIf

    If $Sleep3 = 4 Then
    Send ($Life)
    $Sleep3 = 0
    EndIf

    While 1
    If $Time = 30 Then
    ExitLoop
    EndIf

    $coord = PixelSearch (100,100,1580,880, 0xFF0000,70); Ici, je voudrais que le rectangle de recherche soit adapter pour chacun et que l'utilisateurs puisse faire un rectangle pour délimité .
    If Not @error Then
    MouseClick ("left", $coord[0]+50, $coord[1]-50,1,0)
    Send("1")
    EndIf
    Sleep(1000)
    $Time = $Time + 1
    WEnd

    $Time = 0

    $Sleep1 = $Sleep1 + 1
    $Sleep2 = $Sleep2 + 1
    $Sleep3 = $Sleep3 + 1

    WEnd
    EndFunc

    Func Stop()
    MsgBox(4096, "Info", "Exit with sucess")
    Exit 0
    EndFunc
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Tu connais le jeu des 7 erreurs ?

      S'il vous plaît, épargnez moi vos commentaire "Tu veut faire quoi ? Un bot ? Non, on ne t'aideras pas " car ce n'est pas dans ce but ... !

      vs.

      $Form1 = GUICreate("DARKOBIT BOT", 224, 305, 268, 121)
      0
    2. Xavier591
       
      Bah oui, vallait mieux commençais à être honnête un jour ^^
      Vaut mieux tard que jamais.
      Merci quand même.
      ++
      0