Page 1 sur 1

Condition Elseif

Posté : ven. 26 févr. 2021 11:54
par thomas
Bonjour,

étant débutant j'essaie d’apprendre à utiliser Autoit .Cependant je bloque sur un point, la condition if plus particulièrement sur la condition elseif. le but de mon programme est de détecter des images. si une des images n'est pas visible il cherche la suivante et si aucune image n'est présente une variable s’incrémente. Je stock également la position des images. (le programme n'a aucun but applicatif pour le moment. Je m'en sert pour me former sur Autoit) . j'utilise la bibliothèque _ImageSearch. ci-dessous mon programme

Code : Tout sélectionner

#include <ImageSearch2015.au3>

$quitter = 0
$y = 0
$x = 0
$y1 = 0
$x1 = 0
$y2 = 0
$x2 = 0
$y3 = 0
$x3 = 0
$y4 = 0
$x4 = 0
HotKeySet("{ESC}", "_Exit")

Func _Exit()
Sleep(100)
Exit
EndFunc

While ( 1 )
   $quitter = $quitter + 1
   $search = _ImageSearch('check.png', 10, $x, $y, 0, 0)
   $search1 = _ImageSearch('check1.png', 1, $x1, $y1, 0, 0)
   $search2 = _ImageSearch('check2.png', 2, $x2, $y2, 0, 0)
   $search3 = _ImageSearch('check3.png', 3, $x3, $y3, 0, 0)
   $search4 = _ImageSearch('check4.png', 4, $x4, $y4, 0, 0)

   If $search = 10 Then
	  ToolTip("rouge")
	  ;sleep(2000)
   ElseIf $search1 = 1 Then
	  ToolTip("noir")
	  ;sleep(2000)
   ElseIf $search2 = 2 Then
	  ToolTip("vert")
	   ;sleep(2000)
   ElseIf $search3 = 3 Then
	  ToolTip("violet")
	  ;sleep(2000)
   ElseIf $search4 = 4 Then
	  ToolTip("bleu")
	  ;sleep(2000)

   Else
	   ToolTip($quitter)
	  ;sleep(2000)
   EndIf

WEnd
mon programme détecte bien la première image mais il ne détecte pas les suivantes. Il passe directement à la variable $quitter
je pense que je n'ai pas compris le principe de Elseif.

Cordialement Thomas

Re: Condition Elseif

Posté : ven. 26 févr. 2021 13:55
par mikell
thomas a écrit : ven. 26 févr. 2021 11:54(le programme n'a aucun but applicatif pour le moment. Je m'en sert pour me former sur Autoit)
OK
Bon sérieusement, c'est pour quel programme ?

Re: Condition Elseif

Posté : ven. 26 févr. 2021 15:02
par thomas
à terme il me servira à installer des applications qui ne peuvent pas être déployé en powershell (en gros tous les .exe). il me servira également à automatiser la configuration de base mail HCLnote (réplique local , création d'archives coté client en fonction des années etc... ). Mais avant ça j'ai besoin de savoir comment fonctionne Autoit vue qu'il sera déployé en entreprise.d'où ce programme test.

Cordialement Thomas

Re: Condition Elseif

Posté : ven. 26 févr. 2021 15:10
par rgx
Bonjour,

Dixit l'aide:

Code : Tout sélectionner

;===============================================================================
;
; Description:      Find the position of an image on the desktop
; Syntax:           _ImageSearch
; Parameter(s):     
;                   $findImage - the image to locate on the desktop
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of 
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
;       a desktop region to search
;
;===============================================================================
_ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
1. L'erreur: La valeur de retour d'_ImageSearch ne peut être que 0 ou 1 (donc pas 10, 1, 2, 3)
2. Le deuxième paramètre est la valeur de la tolérance (0-255) ( $tolerance - 0 for no tolerance ).
3. Il ne faut pas mettre la recherche dans la boucle principale, une seule itération suffit à balayer toute la zone
4. Ta syntaxe If/ElesIf est OK dans le principe, mais ici inutile car toutes les images doivent être testées, un Select...Case...EndSelect serait probablement meilleur, car à la première image trouvée, il y aurait sortie de la boucle sans tester le reste. (gain négligeable, mais c'est pour le principe)
5. Inutile d'initialiser les variables à zéro
6. L'automatisation d'installation peut parfois poser problème avec les écrans qui ne sont pas en mode résolution 100% (technique du DPI aware). On a ce problème notamment sur les écrans des portables qui sont souvent à 125% (17") ou 150% (15"). Il faut alors récupérer ce paramètre et avoir un lot d'images correspondant. Sans oublier les écran en mode nuit ou en contraste inversé.
7. C'est hyper délicat le pilotage en mode image, on ne le fait que quand une application n'a aucun raccourci clavier, ce qui n'est pratiquement jamais le cas avec les programmes standard (depuis XP il faut appuyer au moins une fois sur Alt gauche pour les faire apparaitre, mais je pense que tu connais déjà)

:wink:

Re: Condition Elseif

Posté : ven. 26 févr. 2021 16:12
par TommyDDR
Déployer des applications à base de _ImageSearch ?
Si c'est vraiment votre motivation première, je pense que vous faites fausse route !

Re: Condition Elseif

Posté : ven. 26 févr. 2021 16:23
par rgx
Parfois c'est hélas le seul moyen pour des petits programmes fournis uniquement avec des Setup "maison" sans raccourcis et non pas les classiques type InnoSetup, NSIS, InstallShield etc.
Indispensable aussi sur les listes de choix quand le nombre d'items est variables.
Très utile aussi pour la connexion automatique sur les sites avec clavier numérique à ordre aléatoire s'ils ne proposent pas d'alternative. C'est même plus sécuritaire car une autre personne présente n'a pas le temps de voir les mouvements de souris ni d'entendre le clic (à condition que le clavier virtuel n'affiche pas de simulation d'appui)

:wink:

Re: Condition Elseif

Posté : ven. 26 févr. 2021 17:03
par TommyDDR
@rgx : Tout ce que vous citez ont l'air faisable en ControlClic ou en utilisant les bons UDFs pour ce qui est de la connexion aux sites.
@thomas : Exposez vos problématiques avec les logiciels et sites ciblés, vous aurez des réponses plus robustes qu'un _ImageSearch ;) !

Re: Condition Elseif

Posté : lun. 01 mars 2021 09:21
par thomas
Avants toute choses merci Pour l’intérêt que vous portez à ma problématique :) (je ne m'attendais pas à avoir des réponses si vite )

@rgx merci pour votre aide je me renseigne sur le select... Case... EndSelect.

Ma problématique est la suivante: j'ai besoin d'automatiser l'installation et la configuration de plusieurs applications.

liste des applications:

-Dell update (configuration)
-PDFcreator (installation)
-SAP (installation + configuration)
-HCLnote (COnfiguration)
-Delta (installation + Configuration)
-PackOffice (Configuration)

Le reste des applications est déployable et configurable via Powershell.

Liste des Problèmes:

-certaine application ne possède pas de raccourcis clavier.
-les fenêtres ne s’ouvre pas au même endroit sur l’écran.
-dans l'idéal le script doit être utilisable sur 2 catégories d'ordinateur: les ordinateurs portable (écran 15") et les ordinateurs de bureau (écran 21").
-le "Best" serait que les applications s’installent en arrière plan (j'en demande peut-être un peut trop ^^' )

si vous avez des idées je suis prêt à explorer vos pistes ;)

Re: Condition Elseif

Posté : mar. 02 mars 2021 01:37
par TommyDDR
Cela fait pas mal de temps que je voulais le faire, vous m'en avez donné la motivation ! :D

Allez jeter un coup d'oeil ici

Re: Condition Elseif

Posté : mer. 03 mars 2021 14:13
par thomas
Merci ^^
le programme généré retourne une erreur:
"Setup Was cancelled or ran into an unexpected error
La méthode DragMove ne peut être appelée que lorsque le bouton principal de la souris est enfoncé"

code généré:

Code : Tout sélectionner

#include <AutoItConstants.au3>
#RequireAdmin

install()

Func install()
	Local $hwnd
	Local $selector

	$hwnd = winWaitVisible("PDFCreator")
	Sleep(250)
	$selector = 0
	winWaitVisible($hwnd, $selector)
	ControlClick($hwnd, "", $selector, "left", 1, 841, 125)
	ControlClick($hwnd, "", $selector, "left", 1, 583, 210)
	ControlClick($hwnd, "", $selector, "left", 1, 727, 525)
	ControlClick($hwnd, "", $selector, "left", 1, 652, 521)
	$hwnd = winWaitVisible("PDFCreator")
	Sleep(250)
	$selector = 0
	winWaitVisible($hwnd, $selector)
	ControlClick($hwnd, "", $selector, "left", 1, 138, 514)
	$hwnd = winWaitVisible("PdfCreator")
	Sleep(250)
	$selector = 0
	winWaitVisible($hwnd, $selector)
	ControlClick($hwnd, "", $selector, "left", 1, 843, 24)
EndFunc

Func winWaitVisible($hwnd, $ctrlId = Null)
	Local $hwndCheck
	While 1
		$hwndCheck = $ctrlId == Null ? $hwnd : ControlGetHandle($hwnd, '', $ctrlId)
		If(BitAND(WinGetState($hwnd), $WIN_STATE_VISIBLE) == $WIN_STATE_VISIBLE) Then ExitLoop
		Sleep(10)
	WEnd
	Return WinGetHandle($hwnd)
EndFunc

Re: Condition Elseif

Posté : jeu. 04 mars 2021 10:08
par TommyDDR
Pouvez-vous agrémenter votre réponse d'un screen ? c'est étrange que le programme généré vous sorte cette erreur, ça doit être le programme que vous voulez installer qui l'affiche (reste à voir pourquoi).

Re: Condition Elseif

Posté : jeu. 04 mars 2021 16:47
par TommyDDR
En effet, pdfcreator à l'air d'être peu permissif quand à la manipulation de ses fenêtres.

En cherchant PDFCreator silent install, on tombe sur ce message, j'ai testé chez moi, ça fonctionne :

Code : Tout sélectionner

"PDFCreator-4_2_0-Setup.exe" /ForceInstall /VERYSILENT /NORESTART /components="program" /tasks="winexplorer,!desktopicon"

Re: Condition Elseif

Posté : ven. 05 mars 2021 11:00
par thomas
malheureusement PDFcreator bloque l'installation silencieuse lorsque le PC est dans un domaine ^^'

Re: Condition Elseif

Posté : ven. 05 mars 2021 11:47
par TommyDDR
En effet : https://landingpage.pdfforge.org/domain/en
Pouvez vous me dire quelles options vous choisissez dans l'installation de pdfcreator ? (langue, dossier, etc)
Avez-vous utilisé mon programme pour l'installation des autres logiciels ? (et est ce que ça fonctionne pour les autres ?)

Re: Condition Elseif

Posté : sam. 06 mars 2021 14:00
par Tlem
Bonjour.
J'ai trouvé quelques informations "utiles".
https://forums.pdfforge.org/t/pdfcreator-silent-install-not-working-since-4-0-0/16847/3 a écrit :Robin.W Mar '20
Hi,

sorry for the trouble.
We have changed to a new installer technology for PDFCreator 4.0 and above, but the legacy setups are still available while we work on adding back command line switches for the new setup.
You can find the 4.0.3 legacy setup here: http://download.pdfforge.org/download/p ... acy-stable 87
If you are using PDFCreator Free and your computer is part of a domain, the silent install has been disabled after version 3.2.2. In some unfortunate cases, the computer might get incorrectly detected as being part of a domain, which we are still investigating.
If you are using a business edition and would like to deploy silently, we recommend using the MSI packages instead.
Et ce sujet si vous utilisez la version Businness Edition : https://forums.pdfforge.org/t/pdfcreato ... tall/16790
Dans lequel il est expliqué comment extraire le fichier msi pour une installation silencieuse.

Re: Condition Elseif

Posté : lun. 08 mars 2021 15:28
par thomas
@TommyDDR j'installe seulement PDFCreator donc je décoche PDFarchitect (situer dans l'engrenage) puis je fait passer et enfin installer.
j'ai également essayer avec AdobeReader (juste pour le test car il existe un .msi) Mais la in ne détecte pas la fenêtre ^^' https://get.adobe.com/fr/reader/

@Tlem en effet il va peut-être falloir mettre la main au portefeuille pour PDFcreator (même si ça me gêne un peu car dans certain service de l'entreprise il n'est pas beaucoup utilisé) .