FAQ

De Wiki AutoIt Français
Aller à : navigation, rechercher

Voici une liste des questions les plus fréquemment posées sur les forums. Autres FAQS incluses :

  • Celle qui se trouve dans le fichier d'aide AutoIt. Une grande partie est dédiée à la transition de la V2 vers la V3, mais la plus grosse partie de cette FAQ est pertinente et devrait être une bonne étape, tout comme celle-ci.


Sommaire

Comment puis-je déboguer mon script ?

Dans SciTE

Celui-ci a une myriade de réponses, mais le plus efficace est de commencer en utilisant le l'Éditeur SciTE4AutoIt3 pour créer ou éditer des scripts. Ce programme est utile dans le débogage pour les raisons suivantes :

  • La coloration syntaxique permet une visualisation immédiate de n'importe quelles erreurs d'expression non terminées ou de guillemets . Cela permet au scripteur de voir clairement la différence entre les parties du code suivant.
Code Incorrect

Et la version correcte :

Code Correct
  • Le contrôle de la Syntaxe Globale dans le menu des outils vous permet de vérifier les erreurs d'un script entier en une seule fois.
  • L'indentation automatique est incluse, ce qui permet en outre une lecture plus simple du code. Il corrige aussi les problèmes syntaxique des fonctions et variables.
  • L'insertion de la trace ligne par ligne vous permet d'avoir les log des lignes de code exécutées, ceci dans un but de débogage.
  • Des MsgBox ou des ConsoleWrite sont en mesure d’être ajouté n'importe ou dans le script directement à partir de SciTE. ConsoleWrite étant moins intrusif et non bloquant à l'inverse des MsgBox.


Image de SciTE4AutoIt3


En utilisant plus de code pour vérifier la valeur @error

Pratiquement toutes les fonctions retournent quelque chose. La plupart du temps quand une fonction échoue, elle retourne 0 et donne une valeur à la variable @error. Vous pouvez utiliser cette information, pas seulement pour créer des scripts qui gère différentes erreurs, mais aussi pour déboguer et savoir exactement pourquoi vous avez des problèmes. Vérifiez le fichier d'aide de chaque fonction afin de savoir ce que celle-ci retourne.

Via une icône dans la barre des tâches

Pour activer le débogage via une icône dans la barre des tâches, vous pouvez ajouter cette ligne au début de votre script (1 pour activer, 0 pour désactiver).

AutoItSetOption ("TrayIconDebug", 1) ; 0-désactivé

Puis, si vous lancez le script (non compilé via un fichier AU3), vous pouvez déplacer la souris sur l’icône d'AutoIt (prêt de l'horloge) afin d'afficher les informations de débogage.

Exemple d'affichage pour TrayIconDebug


Appel natif OutputDebugString

Vous pouvez aussi déboguer un script sur n'importe quel ordinateur en ajoutant le code suivant dans votre script:

Func dbg($msg)
	DllCall("kernel32.dll", "none", "OutputDebugString", "str", $msg)
EndFunc

Ensuite, lorsque vous devez ajouter une ligne de débogage, appelez la comme ceci :

dbg("La valeur de la variable 1 à ce moment est " & $var1)

Ce moyen de débogage est complètement transparent pour l'utilisateur, et est visible seulement avec un programme tel que DebugView de SysInternals. Cette méthode de débogage a l'avantage supplémentaire d'être à la disposition du développeur dans les situations où ce n'est pas acceptable ou faisable d'installer SciTE sur l'ordinateur d'un client.

Le débogueur graphique

Stumpii a créé un Débogueur Graphique pour AutoIt, similaire à celui des développeurs C++.

Débogueur Graphique AutoIt de Stumpii


Comment puis-je exécuter quelque chose qui n'est pas un fichier .Exe [.Txt,.Msi,.Pdf,.Jpg,etc...]. Ou Comment puis-je ouvrir une page web dans le navigateur par défaut ?

C'est pour cette raison que la fonction ShellExecute a été créée. Voici un exemple:

ShellExecute("C:\autoitscripts\test.au3", "", "", "edit", @SW_MAXIMIZE)

Vous pouvez aussi spécifier une adresse internet, comme ceci :

ShellExecute("http://www.autoitscript.com/forum", "", "", "open")

Si vous êtes en mesure de faire un clic droit sur un fichier et de l'imprimer, vous pouvez aussi le faire en passant par AutoIt en utilisant cette fonction :

ShellExecute("C:\boot.ini", "", "", "print")

Si vous souhaitez ouvrir le fichier avec le programme par défaut, vous pouvez faire comme ceci :

ShellExecute("C:\autoitscripts\test.au3")

Si vous souhaitez que votre script attende que le processus soit terminé, vous pouvez utiliser la fonction ShellExecuteWait avec les mêmes paramètres.

Note: La valeur par défaut pour "verbe" est le verbe configuré dans le Registre. Si aucun verbe n'est défini par défaut dans le Registre, alors le verbe "ouvert" est utilisé. Si le verbe «ouvert» n'est pas présent alors le premier verbe répertoriés dans le registre est utilisé (sauf sous Windows 2000).


Comment puis-je empêcher le lancement de plus d'une copie de mon script, ou comment détecter une autre copie de mon script exécuté ?

Fonction _Singleton

Il y a plusieurs façons d'aborder ce sujet. Vous pouvez utiliser une fonction appelée _Singleton afin de détecter de multiples instances de votre script.
Exemple de la façon d'utiliser ce code :

#include <Misc.au3>
_Singleton("LeNomDeMonScript")

Dans ce cas, le script s'arrêtera immédiatement s'il y a déjà une copie en route. Si vous souhaitez simplement savoir si une autre copie est lancé, vous pouvez utiliser un code similaire à l'exemple suivant:

#include <Misc.au3>
If _Singleton("LeNomDeMonScript", 1) = 0 Then
	; Nous savons que le script est déjà en fonctionnement. Informons l'utilisateur maintenant.
	MsgBox(0, "Nom du Script", "Ce script est déjà en fonctionnement. L'utilisation de multiples copie de ce script au même moment, n'est pas supporté !")
	Exit
EndIf


Fonction _MutexExists

Une autre méthode est d'utiliser _MutexExists.

If _MutexExists("LeNomDeMonScript") Then
	; Nous savons que le script est déjà en fonctionnement. Informons l'utilisateur maintenant.
	MsgBox(0, "Nom du Script", "Ce script est déjà en fonctionnement. L'utilisation de multiples copie de ce script au même moment, n'est pas supporté !")
	Exit
EndIf

;Auteur de la fonction : Martin
Func _MutexExists($sOccurenceName)
	Local $ERROR_ALREADY_EXISTS = 183, $handle, $lastError
	$sOccurenceName = StringReplace($sOccurenceName, "", ""); pour éviter une erreur
	$handle = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $sOccurenceName)
	$lastError = DllCall("kernel32.dll", "int", "GetLastError")
	Return $lastError[0] = $ERROR_ALREADY_EXISTS
EndFunc;==>_MutexExists


Comment puis-je exécuter mon script en tant que service ?

C'est aussi une question à réponses multiples, et chacune d'entre elles permet de faire la même chose. La première question à se poser, c'est de savoir si oui ou non vous souhaitez installer le service sur des ordinateurs autres que le vôtre.


Sur votre propre ordinateur - Une seule fois

La meilleure façon de faire est d'utiliser RunAsSvc de Pirmasoft. Ce programme rend les services faciles à installer et facile à enlever si nécessaire.


Sur tous les ordinateurs qui exécutent votre script

Pour faire cela, vous pouvez utiliser SRVANY.EXE et ServiceControl.au3. Vous pouvez ensuite utiliser ce code pour installer votre script comme service :

#include "ServiceControl.au3"
$servicename = "LeNomDeMonService"
_CreateService("", $servicename, "Mon Script AutoIt", "C:\Chemin_Vers_\srvany.exe", "LocalSystem", "", 0x110)
RegWrite("HKLM\SYSTEM\CurrentControlSet\Services\" & $servicename & "\Parameters", "Application", "REG_SZ", @ScriptFullPath)

Ou le code suivant pour supprimer ce service.

#include "ServiceControl.au3"
$servicename = "LeNomDeMonService"
_DeleteService("", $servicename)

Il y a une restriction à la mise en place d'AutoIt comme service. Si le service n'est pas installé en utilisant le code ci-dessus, il doit avoir l'option "Autoriser le service à interagir avec le bureau" comme réglage, sinon d'autres fonctions d'automatisation, tels que les fonctions Control* ou Win* ne fonctionnerons pas. Afin de s'assurer que le service a bel et bien ce paramètre, utilisez le code suivant:

RegWrite("HKLM\SYSTEM\CurrentControlSet\Services\[LeNomDeMonService]", "Type", "REG_DWORD", 0x110)


Comment puis-je créer/démarrer/arrêter ou contrôler d'une autre manière un service ?

Il y a deux bibliothèques qui ont été conçus spécifiquement pour interagir avec les services. Ce sont les suivantes:

  • ServiceControl.au3 créée par SumTingWong. Fonctionnalités :
    • _StartService()
    • _StopService()
    • _ServiceExists()
    • _ServiceRunning()
    • _CreateService()
    • _DeleteService()


  • _NTServices.au3 créée par CatchFish. Fonctionnalités :
    • _ServiceStart()
    • _ServiceStop()
    • _ServiceStatus()
    • _ServicePause()


Comment puis-je afficher une barre de progression pendant la copie de fichiers ou répertoires ?

Il y a différentes façons de faire ceci. Pour plus d'information, faites une recherche sur le forum pour 'Progress Copy'+Progress.


Boite de dialogue avec barre de progression par ezztabi


Comment puis-je faire un raccourci clavier qui ne fonctionne que dans mon interface graphique ?

Il peut être pénible de régler les raccourci clavier pour fonctionner uniquement avec votre GUI. Maintenant, il existe une méthode plus simple avec la fonction GUISetAccelerators.

(Des exemples du fichier d'aide)

; Une simple boite de dialogue qui utilise le mode boucle de message
#include <GUIConstantsEx.au3>

GUICreate("Boite de dialogue personnalisée", 210, 80)

GUICtrlCreateLabel("Veuillez cliquer un bouton !", 10, 10)
$YesID = GUICtrlCreateButton("Oui", 10, 50, 50, 20)
$NoID = GUICtrlCreateButton("Non", 80, 50, 50, 20)
$ExitID = GUICtrlCreateButton("Quitter", 150, 50, 50, 20)

; Régle accelerators pour Ctrl+y et Ctrl+n
Dim $AccelKeys[2][2]=[["^o", $YesID], ["^n", $NoID]]
GUISetAccelerators($AccelKeys)

GUISetState(); Affiche la GUI

Do
	$msg = GUIGetMsg()

	Select
		Case $msg = $YesID
			MsgBox(0, "Vous avez cliqué sur", "Oui")
		Case $msg = $NoID
			MsgBox(0, "Vous avez cliqué sur", "Non")
		Case $msg = $ExitID
			MsgBox(0, "Vous avez cliqué sur", "Quitter")
		Case $msg = $GUI_EVENT_CLOSE
			MsgBox(0, "Vous avez cliqué sur", "Fermer")
	EndSelect
Until $msg = $GUI_EVENT_CLOSE Or $msg = $ExitID


Comment puis-je effectuer une action tandis qu'une touche est enfoncée ?

Vous pouvez utiliser la fonction _IsPressed() pour déterminer lorsqu'une une touche est maintenue enfoncée. Les valeurs qui peuvent être spécifiées dans cette fonction sont répertoriées dans le fichier d'aide d'AutoIt sous Fonctions Utilisateur pré-Définie -> Gestion Diverse -> _IsPressed. L'exemple suivant appuiera sur le bouton gauche de la souris alors que la touche k sera maintenue enfoncé".

#include <Misc.au3>
$pressed = 0
While 1
	If _IsPressed("4B") Then
		If Not $pressed Then
			ToolTip("La touche K est maintenue enfoncé")
			MouseDown("left")
			$pressed = 1
		EndIf
	Else
		If $pressed Then
			ToolTip("")
			MouseUp("left")
			$pressed = 0
		EndIf
	EndIf
	Sleep(250)
WEnd


Comment puis-je exécuter mes scripts sur un ordinateur distant via le réseau ?

La réponse à cette question dépend de votre expérience dans la gestion de réseau. Si le système cible est un Windows XP Pro ou Windows 200x et que vous avez un accès administrateur, alors vous pouvez utiliser l'un des programmes suivants:

  • PsExec de SysInternals
  • BeyondExec de BeyondLogic

Avec l'un de ces deux programmes, il est possible de lancer un processus sur un système distant, et même copier votre script sur ​​l'ordinateur cible avant de le lancer. Aucun de ces programmes ou similaires ne fonctionneront sous Windows XP Home Édition à moins que vous n'ayez créé un "récepteur de commandes" personnalisé que vous aurez installé manuellement sur ​​le système cible.

NOTE: Ceux d'entre vous avec plus de compétences en programmation avancée et un peu d'imagination peuvent comprendre comment utiliser les bibliothèques de contrôle de service et srvany.exe, afin de faire ceci sans l'un des programmes mentionnés ci-dessus.


Comment puis-je faire une Fonction Utilisateur Définie avec des paramètres facultatifs comme ceux que je vois dans le fichier d'aide ?

Vous pouvez spécifier des paramètres optionnels en leur donnant une valeur par défaut dans la déclaration de Function. Un exemple de comment cela est fait:

Func testme($param1, $param2 = "rien", $param3 = 5)
	MsgBox(0, "", "Le paramètre 1 est requis. La valeur du paramètre 1 est " & $param1 & @CRLF & _
		"Le paramètre 2 est optionnel. La valeur du paramètre 2 est " & $param2 & @CRLF & _
		"Le paramètre 3 est optionnel. La valeur du paramètre 3 est " & $param3)
EndFunc

Si testme() est utilisé avec seulement un paramètre (par exemple : testme("test")), alors en sortie, nous aurons :

Le paramètre 1 est requis. La valeur du paramètre 1 est test
Le paramètre 2 est optionnel. La valeur du paramètre 2 est rien
Le paramètre 3 est optionnel. La valeur du paramètre 3 est 5

Cependant, si la fonction est utilisée avec plus d'un paramètre comme ceci : testme("test", "quelque chose"), alors en sortie, nous aurons :

Le paramètre 1 est requis. La valeur du paramètre 1 est test
Le paramètre 2 est optionnel. La valeur du paramètre 2 est quelque chose
Le paramètre 3 est optionnel. La valeur du paramètre 3 est 5


Comment puis-je faire pour que mon script soit lancé à chaque démarrage de Windows ?

Vous pouvez utiliser l'un des codes suivants pour permettre à votre script de démarrer avec Windows :

RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "NomDuProgramme", "REG_SZ", @ScriptFullPath)

ou

FileCreateShortcut(@ScriptFullPath, @StartupCommonDir & "\NomDuProgramme.lnk")


Comment puis-je faire pour que le script s'auto-détruise ?

La fonction suivante permet de supprimer le script exécuté ou l'exe une fois qu'il a terminé son exécution.

ATTENTION : Faites une copie de votre script avant d'appeler cette fonction !!!

Func _SelfDelete($iDelay = 0)
	Local $sCmdFile
	FileDelete(@TempDir & "\scratch.bat")
	$sCmdFile = 'ping -n ' & $iDelay & ' 127.0.0.1 > nul' & @CRLF _
			 & ':loop' & @CRLF _
			 & 'del "' & @ScriptFullPath & '"' & @CRLF _
			 & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
			 & 'del %0'
	FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
	Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
EndFunc;==>_SelfDelete


Comment puis-je créer un lien hypertexte cliquable dans ma GUI ?

Exemple de GUI utilisant l'UDF de Gary.

Gary Frost a fait une grande avancée dans ce domaine et a fourni un UDF ici pour vous aider à faire ça.


Comment puis-je changer la résolution d'écran/taux de rafraîchissement/profondeur de couleur ?

ChangeResolution.au3 est une fonction créée pour apporter des modifications à ces paramètres.


Comment puis-je obtenir la résolution d'écran dans des configurations d'écrans multiples ?

Le code suivant a été élaboré par Larry pour déterminer la résolution d'écran total de plusieurs moniteurs:

$aTSR = _GetTotalScreenResolution()
MsgBox(0, "Résolution totale d'écran", "Largeur = " & $aTSR[0] & @CRLF & _
		"Hauteur = " & $aTSR[1])

;Code original par Larry.
;Edité par BrettF
Func _GetTotalScreenResolution()
	Local $aRet[2]
	Global Const $SM_VIRTUALWIDTH = 78
	Global Const $SM_VIRTUALHEIGHT = 79
	$VirtualDesktopWidth = DllCall("user32.dll", "int", "GetSystemMetrics", "int", $SM_VIRTUALWIDTH)
	$aRet[0] = $VirtualDesktopWidth[0]
	$VirtualDesktopHeight = DllCall("user32.dll", "int", "GetSystemMetrics", "int", $SM_VIRTUALHEIGHT)
	$aRet[1] = $VirtualDesktopHeight[0]
	Return $aRet
EndFunc


Comment puis-je enregistrer un type de fichier avec mon programme [ou] Comment puis-je faire pour ouvrir des fichiers avec une extension dans mon programme ?

Exemple d'enregistrement d'un type de fichier.

L'enregistrement de fichiers peut être une affaire délicate pour ceux qui ne l'ont jamais fait. La première chose à faire est de modifier votre script pour lui permettre d'accepter les lignes de commandes. Voici un exemple de comment faire cela :

;$cmdline[0] est le nombre de paramètres passés
If $cmdline[0] <> 0 Then
	$filename = $cmdline[1]
;Faites quelque chose avec le fichier ici
	MsgBox(0, "UXYFixer", 'Le nom de fichier passé en ligne de commande est "' & $filename & '"')
Else
; Nous n'avons pas eu de paramètres en ligne de commande.
; Si ceci est un programme console, vous voudrez sans doute
; alerter l'utilisateur que les paramètres sont incorrects.
; Si ceci est un programme graphique (comme le Bloc-notes),
; vous voudrez simplement continuer sans ouvrir un fichier.
	MsgBox(0, "UXYFixer", 'Paramètre de ligne de commande incorrects.' & @CRLF & 'Paramètre de ligne de commande : "' & @ScriptName & '" "fichier à traiter"')
EndIf

Après que votre script soit prêt à accepter des fichiers, vous pouvez commencer à enregistrer le type de fichier dont vous avez besoin avec votre programme. Pour éviter les erreurs, this-is-me a créé un UDF qui vous permettra de faire ceci facilement :

Voici un exemple de la façon d'enregistrer et désenregistrer une extension de fichier en utilisant cet UDF:

#include "FileRegister.au3"
;================================================
;
; Description:	FileRegister($ext, $cmd, $verb [, $def [, $icon = "" [, $desc = "" ]]])
;			   Enregistre un type de fichier dans l'Explorer
;
; Parameter(s): $ext -  Extension du fichier sans le point - Par exemple : "zip"
;		$cmd -  Chemin du programme avec paramètres - Par exemple '"C:\test\testprog.exe" "%1"'
;			 (%1 est le premier argument, %2 est le second, etc...)
;		$verb - Nom de l'action à exécuter sur le fichier
;			 Par exemple "Ouvrir avec NomDuProgramme" ou "Extraire Fichiers"
;		$def -  Action par défaut pour ce type de fichier
;			 (1 pour vrai 0 pour faux)
;			 Si le fichier n'est pas déjà associé, ce sera la valeur par défaut.
;		$icon - Icône par défaut pour ce type de fichier avec son index si nécessaire
;			 Par exemple "C:\test\testprog.exe,0" ou "C:\test\filetype.ico"
;		$desc - Description du fichier - Par exemple "Fichier Zip" ou "Document NomDuProgramme"
;
;================================================

 FileRegister("uxy", '"' & @ScriptFullPath & '" "%1"', "Ouvrir dans UXYFixer", 1, @ScriptFullPath & ',0', "Document UXYFixer")

;========================================
;
; Description:	FileUnRegister($ext, $verb)
;			   Désenregistre un verbe pour un type de fichier dans l'Explorer
; Parameter(s):  $ext - Extension du fichier sans le point - Par exemple : "zip"
;			   $verb - Nom de l'action sur fichier à supprimer
;					 Par exemple "Ouvrir avec NomDuProgramme" ou "Extraire Fichiers"
;
;========================================

 FileUnRegister("uxy", "Ouvrir dans UXYFixer")

Téléchargement ici : FileRegister.au3


Pourquoi ma combobox (GUICtrlCreateCombo) ne montrent pas de liste déroulante lorsqu'elle est cliquée ?

Lorsque vous utilisez GUICtrlCreateCombo, veillez à entrer la hauteur désirée pour votre liste déroulante dans le paramètre "hauteur". Windows XP sélectionne automatiquement une hauteur appropriée, mais habituellement, pas les autres versions de Windows.

$combo = GUICtrlCreateCombo("",10,10,200,20)

Sera plutôt :

$combo = GUICtrlCreateCombo("",10,10,200,200)


Pourquoi mon sujet n'a pas de réponses ?

Poser la bonne question correctement

Avez-vous donné une bonne description du problème ? Si votre titre ou l'explication du problème n'est pas suffisamment descriptif, les utilisateurs passerons le problème au lieu de vous aider. Un titre tels que "Aidez moi", "J'ai un problème", "Question", "Aidez-moi à corriger mon code", "Ce code ne fonctionne pas", ou un titre similaire, aura peu de chance d'attirer des utilisateurs du forum sur votre sujet. Les utilisateurs expérimentés (qui sont votre meilleurs espoir de résoudre le problème) sauterons souvent un message écrit comme ceci. Un exemple de titre de message suffisamment descriptif pour attirer des utilisateurs à vous aider serait "Problème avec WinWaitClose", ou "boucle sans fin".

Exemple de code

Avez-vous écrit un exemple de code ? Si vous n'avez pas écrit un exemple de code et que vous rencontrez un problème avec, alors vous ne recevrez pas de soutien. lorsque vous écrivez un code qui ne fonctionne pas, merci de limiter le code inutile. Si le code que vous écrivez ne peux pas être exécuter sur l'ordinateur d'une autre personne, ils ne seront pas en mesure de recréer le problème et ainsi de vous aidez.

Parlez en français et faite le bien

Avez-vous utilisé un français correct ? Voici quelques lignes directrices pour écrire correctement dans la langue française :

  • Utilisez le cas approprié. CECI EST CONSIDÉRÉ COMME CRIER. Si vous écrivez tout en majuscules ou en minuscules, vous ressemblerez à un idiot.
  • Utiliser la ponctuation appropriée. Une phrase complète n'a besoin que d'un seul signe de ponctuation de fin, pas trois ! La rédaction d'une phrase sans ponctuation simples tels que des virgules ou autre ponctuation est considéré comme paresseux, ce qui reflète votre style de codage. Si vous n'êtes pas capable d'écrire une phrase avec une ponctuation correcte, vous aurez très probablement manquer de simples erreurs de codage tels que des guillemets non fermés.


Pourquoi la touche Ctrl reste enfoncée, après que j'ai lancé mon script ?

Touches virtuellement bloquée

Ceci ce réfère également à la touche Maj et à la touche Alt.

Si vous utilisez Send dans un script et que vous avez un problème une touche qui est resté enfoncée alors Send est probablement le coupable. Un problème similaire peut aussi se produire avec BlockInput. La solution est généralement assez simple. S'il y a une touche comme Shift ou Alt enfoncée au début de la séquence Send, mais que la touche est libérée par le temps impartit à la séquence Send alors la touche restera 'enfoncée'. Comme exemple de solution, vous pouvez remplacer la fonction Send dans votre script par la fonction _SendEx ci-dessous.

La fonction _SendEx attend la libération de Maj, Alt et Ctrl ou affiche un avertissement si le paramètre $warn n'est pas une chaîne vide. Par conséquent, elle n'est pas destinée à être utilisé lorsque l'une de ces touches de modification a été désignée pour être enfoncée avec l'une des combinaisons suivante {ALTDOWN}, {SHIFTDOWN} et {ALTDOWN}.

#include < Misc.au3 >
;Envoi la chaîne $ss après que les touches Shift Alt et Ctrl sont relachées. Optionnellement, donne une erreur après 1 sec si aucune de ces touches reste enfoncée.
;Nécessite d'inclure misc.au3 dans le script pour la fonction _IsPressed.
Func _SendEx($ss, $warn = "")
	Local $iT = TimerInit()

	While _IsPressed("10") Or _IsPressed("11") Or _IsPressed("12")
		If $warn <> "" And TimerDiff($iT) > 1000 Then
			MsgBox(262144, "Avertissement", $warn)
		EndIf
		Sleep(50)
	WEnd
	Send($ss)
EndFunc;==>_SendEx

Méthode générale de déblocage

Shilbiz a découvert que ce qui suit, peut 'effacer' les touches verrouillées.

 ControlSend("", "", "", "text", 0)


Comment puis-je utiliser les fonctions Pixel ?

Utiliser un changement de couleur comme un évènement

Voici un exemple d'utilisation d'une fonction qui permet de vérifier si la couleur a changée dans une région spécifique.

Local $PixelCheck, $NewCheck
$PixelCheck = PixelCheckSum(40, 50, 60, 70); Récupère la somme de contrôle de cette zone.
While 1; Boucle infinie
	$NewCheck = PixelCheckSum(40, 50, 60, 70)
	If $PixelCheck <> $NewCheck Then
		; L'ancienne somme de contrôle et la nouvelle sont différente.
		$PixelCheck = $NewCheck; Met à jour $PixelCheck avec la nouvelle valeur
		; Nous savons maintenant qu'il a changé.  Modifiez ceci pour faire ce qui doit arriver lorsque la couleur de cette zone change.
		Msgbox(48,"PixelChecksum","La zone de pixel a changé !")
	EndIf
	Sleep(50); Juste pour laisser souffler votre processeur.
Wend

Recherche d'un pixel de couleur spécifiques

Ceci est un exemple de recherche d'un pixel spécifique (rouge), un rouge pur (0xFF0000) et un rouge avec des nuances.

; Cherche un pixel rouge absolu dans la portée 0,0-20,300
$coord = PixelSearch( 0, 0, 20, 300, 0xFF0000 )
If Not @error Then
	MsgBox(0, "X et Y sont :", $coord[0] & "," & $coord[1])
EndIf


; Cherche un pixel rouge absolu ou un pixel rouge dans les limites de 10 nuances de rouge absolu
$coord = PixelSearch( 0, 0, 20, 300, 0xFF0000, 10 )
If Not @error Then
	MsgBox(0, "X et Y sont :", $coord[0] & "," & $coord[1])
EndIf


Pourquoi mon script ne fonctionne pas sur un poste de travail verrouillé ?

Sur une station verrouillée, aucune fenêtre ne sera jamais active (la seule fenêtre active étant celle avec le texte "Appuyez sur Ctrl + Alt + Suppr", ou l'écran d'accueil avec les icônes de sessions). Lorsqu'un poste est dans un état ​verrouillé, les application Windows fonctionne cachées (derrière l'écran d'ouverture de session) et n'ont pas de focus ou d'état actif. Donc n'utilisez pas les fonctions Send(), MouseClick(), WinActivate,(), WinWaitActive(), WinActive(), etc ... Mais plutôt ControlSend(), ControlSetText(), ControlClick(), WinWait(), WinExists(), WinMenuSelectItem(), etc ... De cette façon, votre script sera plus efficace à l'encontre d'une autre fenêtre active. Il est possible d'exécuter un tel script à partir du planificateur de tâche sur une station Windows verrouillée.


Où puis-je apprendre AutoIt ? Y-a t'ils des tutoriels ?

Rendez-vous sur la page Tutoriels du Wiki.

Pourquoi mon script ne se décompile plus ?

La décompilation n'est plus supportée, et n'est disponible que pour les anciennes versions de AutoIt (version 3.2.5.1 et scripts compilés antérieurement).

S'il vous plaît, n'écrivez pas sur ce sujet, mais cherchez dans les forums pour plus d'informations. Un sujets comme celui-ci est généralement verrouillé.

De plus, écrire la source (si un décompilateur pirate a été utilisé) d'un script compilé par quelqu'un d'autre, ou faire mention de ce décompilateur pirate, vous fera probablement bannir. de plus, il est en violation du CLUF AutoIt (Contrat de Licence Utilisateur Final)

Vous ne devez pas effectuer de la rétro-ingénierie ou désassembler le PRODUIT LOGICIEL ou des scripts compilés qui ont été créés avec le PRODUIT LOGICIEL.

Veuillez consulter la FAQ Décompilation‎ pour plus d'informations.


Comment puis-je obtenir le handle d'une fenêtre quand tout ce que j'ai est un PID ?

Se référer à l'exemple suivant, montrant la conversion et l'utilisation lors de la manipulation de fenêtre. La fonction est basée sur le travail de Smoke_N/Hubertus et Helge.

;Lance un processus
$iPID = Run("Notepad.exe")

;Attend que la fenêtre s'initialise...
Sleep (500)

;Récupère le handle (HWND).
$hWnd = _GetHwndFromPID($iPID)

;Maximise
WinSetState($hWnd, "", @SW_MAXIMIZE)

;Attend 2 secondes
Sleep(2000)

;Minimise
WinSetState($hWnd, "", @SW_MINIMIZE)

;Attend 2 secondes
Sleep(2000)

;Restore la fenêtre
WinSetState($hWnd, "", @SW_RESTORE)

;Attend 2 secondes
Sleep(2000)

;Déplace en haut à gauche de l'écran et redimensionne en 800x600
WinMove($hWnd, "", 0, 0, 800, 600)

;Attend 2 secondes
Sleep(2000)

;Calcule le centre de l'écran.
$x = (@DesktopWidth / 2) - 400 ; La largeur du bureau divisé par 2, puis diminue de la moitié de la largeur de la fenêtre
$y = (@DesktopHeight / 2) - 300 ; Desktop height divided by 2, puis diminue de la moitié de la hauteur de la fenêtre

;Déplace au cenre de l'écran
WinMove($hWnd, "", $x, $y)

;Attend 2 secondes
Sleep(2000)

;Ferme le Bloc-notes
WinClose($hWnd)


;Fonction pour obtenir le handle à partir du PID
Func _GetHwndFromPID($PID)
	$hWnd = 0
	$winlist = WinList()
	Do
		For $i = 1 To $winlist[0][0]
			If $winlist[$i][0] <> "" Then
				$iPID2 = WinGetProcess($winlist[$i][1])
				If $iPID2 = $PID Then
					$hWnd = $winlist[$i][1]
					ExitLoop
				EndIf
			EndIf
		Next
	Until $hWnd <> 0
	Return $hWnd
EndFunc;==>_GetHwndFromPID


Comment puis-je utiliser des simples ou doubles guillemets dans des chaînes ?

C'est un concept assez simple une fois que vous maitrisez l'essentiel. Il existe plusieurs méthodes sur le mélange de guillemets dans les chaînes.

Un chaine dans AutoIt peut être encadrée soit par un simple (') ou un double (") guillemet. Donc si vous voulez ajouter un type de guillemet dans votre chaîne, votre première étape est d'utiliser l'autre type de guillemet pour encadrer la chaîne. Comme ceci :

$var = "Je suis un 'guillemet' dans la chaîne"
MsgBox (0, "Test 1", $var)
$var = 'Je regrette que je ne puisse pas être un "guillemet" dans la chaîne !'
MsgBox (0, "Test 1", $var)

Si vous devez avoir les deux types de guillemets dans la chaine, la meilleur méthode est d’échapper le guillemet de fin de chaîne. Pour faire ceci, utilisez 2 guillemets au lieu d'un. Comme ceci :

$var = 'Je suis des ''guillemets'' simples dans une chaîne encadrée par des "guillemets simples !"'
MsgBox (0, "Test 1", $var)


Quant doit-je faire remonter mon sujet ?

Par courtoisie envers les autres utilisateurs, vous ne devriez faire remonter votre sujet qu'une seule faois par 24 heures. En faisant ceci, vous laissez une chance aux autres utilisateurs d'être aidé de manière équitable. Quoi qu'il en soit, veuillez vous référer à Pourquoi mon sujet n'a pas de réponses ?, ceci vous aidera à obtenir des réponses.


Comment puis-je protéger mon code de la décompilation ?

La réalité de la chose est vous ne pouvez pas entièrement protéger votre code. AutoIt est un langage interprété, ainsi tous les scripts sont interprétés et un script doit être stocké quelque part avant d'être interprété ;) Mais il y a toujours de l'espoir. Vous pouvez prendre certaines mesures pour empêcher le code décompilé d'être utilisables par la personne qui a décompilé. La première étape est de camoufler (obfusquer) le code. Ceci rend le code illisible. Fondamentalement, les variables et les fonctions sont renommées de telle sorte qu'il est difficile de comprendre à quoi sert certaines choses.

Veuillez lire la FAQ Décompilation pour plus d'information.


Comment puis-je décompiler mes EXE AutoIt ?

Vous ne pouvez pas décompiler vos scripts compilés AutoIt à moins qu'ils n'aient été compilés avec AutoIt 3.2.5.1 ou plus ancien.

Si vous voulez simuler une décompilation de votre script, vous pouvez le faire en utilisant l'exemple suivant :

;Auteur original SmokeN
If $CMDLINE[0] Then
	If $CMDLINE[1] == "/SOURCE" AND $CMDLINE[2] == "MonMotDePasse" Then
		FileInstall("MonScript.au3", @ScriptDir & "\ScriptDecompilé.au3")
	EndIf
EndIf

En lançant votre script avec les paramètres suivants, votre source sera extraite.

MonScript.exe /SOURCE MonMotDePasse

Quel est la netiquette du forum ? Quels sont les règles du forum ?

Respecter la netiquette des forums vous permettra de rester un membre de ceux-ci. Ainsi, essayez de suivre ces règles. Voir aussi ceci FAQ des messages, que vous devriez suivre aussi.

  • Utilisez un langage propre. L'écriture à la MSN rend la compréhension de ce que vous voulez très dure à comprendre. Gardez les messages dans la bonne casse, l'écriture en MAJUSCULE est considérée comme un hurlement, et tout en minuscule vous fait ressembler à un idiot. Également, n'utilisez pas plus de ponctuation que nécessaire. Par exemple ?!!!? et ????? sont complètement inutiles.
  • Avant de demander de l'aide pour votre script, assurez-vous de remplir les conditions suivantes :
    1. Cherchez si votre question n'a pas déjà été posée.
      • Il y a plusieurs milliers de messages sur ce forum et il y a de fortes chances pour que votre question ai déjà été posée par une autre personne. Soyez sure d'utiliser une variété de termes, afin de maximiser vos résultats.
    2. Lisez le fichier d'aide.
      • La plupart des fonctions natives dans le fichier d'aide auront un exemple ou deux. Essayez-les afin de voir comment fonctionne les fonctions. La plupart du temps ça aide !
    3. Testez.
      • Sérieusement, si vous ne vous donnez pas la peine de tester, alors pourquoi devrions-nous nous donner la peine de vous aider ? Si vous sentez que vous ne pouvez pas le faire et que vous ne le faites pas, comment allez vous savoir si ça fonctionne. Nous préférons toujours que vous testiez pour apprendre de vos erreurs et ainsi mieux comprendre votre problème.
    4. Écrivez votre problème
      • Assurez vous d'écrire dans la bonne section du forum.
        • Spécifique à AutoIt
          • General Help and support (Aide générale)
          • Graphical User Interface (GUI) Help and Support (Interface utilisateur GUI)
        • Non spécifique à AutoIT
          • Chat
          • Developer chat (Habituellement pour des questions C++)
      • Inclure une description détaillée dans le corps du message, et un titre détaillé
        • Des titres tels que "A l'aide" et "Qu'est-ce qui ne marche pas ?" ne sont pas acceptables. Pour obtenir une aide correcte pour votre problème, soyez le plus descriptif possible dans le titre, mais gardez à l'esprit de votre titre ne doit pas être trop long.
        • Assurez-vous d'inclure une question explicite. Le "Sa ne fonctionne pas" n'est pas acceptable, car nous n'aurons aucune idée de votre problème. Ne décrivez pas ce que vous pensez, mais ce qui ne fonctionne pas. Cela facilitera notre travail.
      • Écrivez votre code
        • Cela nous montre que vous avez essayé, et nous donne un début de recherche. Ajoutez-le toujours.
  • Habituellement une demande de création de script n'est pas très bien vue, dans la limite du raisonnable. Gardez à l'esprit qu'il s'agit d'un forum de support. La plupart d'entre nous préféreront que vous apprenez de vous même au lieu d'avoir un script tout prêt. Si vous avez besoin que l'on écrive un script pour vous, essayez RentACoder, qui est plus adapté aux demandes.
  • N'envoyez pas de mail privé aux autres membres en leur demandant de l'aide. Il est effectivement assez désagréable et gênant de recevoir des messages de cette nature.
  • Observez un petit peu avant de vous lancer. Lisez un certains nombre de messages ou regardez les archives. Essayez de comprendre le ton du forum afin de participer en conséquence.
  • Dites en ligne exactement ce que vous diriez en personne. En d'autres termes, si vous ne le dites pas tel que vous le diriez à votre grand-mère, ne le dites pas ici !
  • N'oubliez pas qu'on ne voit pas votre visage. Les mots seul peuvent transmettre un sentiment, mais sans l'avantage d'inflexion ou de l'expression du visage, ils peuvent être mal interprétés. Utilisez une formulation descriptive, des émoticônes ou des gifs afin de vous assurer que votre sentiment est clair. De la même façon, ne tirez pas de conclusions hâtives sur un commentaire pas très claire d'une autre personne. En cas de doute, demandez des précisions.
  • Soyez respectueux. L'éthique d'Internet est similaire à l'éthique standard dans ce domaine. Comprenez que votre opinion en est une parmi tant d'autres. Vous pouvez être en désaccord avec une personne sans être irrespectueux ou impoli envers celle-ci.
  • Ignorer les Trolls. Si vous vous engagez dans une telle conversation, vous augmenterez votre tension artérielle et vous augmenterez le Troll. Vous n'y gagnerez rien et ne changerez pas son opinion. Souvent, ils ne se soucient même pas du sujet, ils vivent pour le conflit et rien de plus. Les trolls sont communs et pas digne d'intérêt. Ignorer leurs messages, peu importe l'incident, finalement ils finirons par s'ennuyer et partir.
  • Lorsque vous avez trouvez réponse à votre question :
    1. N'éditez pas votre message pour en effacer le contenu. D'autres peuvent faire la même recherche que vous. Soyez courtois envers eux en laissant votre question à sa place.
    2. Merci d'ajouter [SOLVED] dans le titre de votre premier message ([R] pour le forum Français) et de re-diriger le gens vers la réponse qui vous à aidé. Cela facilitera la vie de ceux qui cherche.
  • Pour finir, respectez ces règles :


Certains points sont repris d'ici

Est-ce qu'il existe des forums disponibles dans ma langue ?

Oui il en existe, avec des utilisateurs commun.

Mes exécutables AutoIt sont-ils vraiment infectés ?

Un sujet qui revient souvent sur les forums, est celui de l'infection virale d'un script AutoIt. Il arrive fréquemment qu'un script AutoIt soit reconnu comme un virus. Pour en savoir plus, veuillez consulter l'article ci-dessous :

Mes exécutables AutoIt sont-ils vraiment infectés