Functions > Window > Controls >


ControlSend

Envoie une chaîne de caractère à un contrôle.

ControlSend ( "title", "text", controlID, "string" [, flag = 0] )

Paramètres

title Le titre/hWnd/class de la fenêtre à atteindre. Consultez Définition spéciale de titre.
text Le texte de la fenêtre à atteindre. Consultez Définition spéciale de texte.
controlID Le contrôle avec lequel interagir. Consultez Controls.
string Chaîne de caractères à envoyer au contrôle.
flag [optionnel] Change la manière de traiter les "touches":
    0 = (défaut) Texte contenant des caractères spéciaux tel que + et ! pour indiquer que les touches SHIFT et ALT sont pressées.
    1 = les touches sont envoyées en mode raw (tel quel).

Les constantes sont définies dans 'AutoItConstants.au3'.

Valeur de retour

Succès: Retourne 1.
Échec: Retourne 0 si la fenêtre/le contrôle n'est pas trouvé.

Remarques

ControlSend() fonctionne de manière similaire à Send, mais il peut envoyer des appuis de touche directement à une fenêtre ou un contrôle, au lieu de la fenêtre active seulement.

ControlSend() est instable pour les fenêtres de commande (DOS) car elles fonctionnent différemment d'une fenêtre normale (Semble vérifier l'état physique plutôt qu'accepter les messages de frappe clavier). Pour une fenêtre normale, ControlSend() devrait être plus fiable, qu'un Send() normal. Et oui, il envoie Shift, Ctrl, Alt etc.

Comme il est mentionné dans l'aide de Send(), un clavier qui envoie des caractères différents lorsque CAPS LOCK et la touche Shift sont utilisée ne peut être simulé (le clavier Tchèque par exemple). Une bonne manière de contourner le problème, est d'utiliser ControlSetText().

Le contrôle peut en premier avoir besoin du focus avec la fonction ControlFocus(), spécialement lorsqu'il se réfère à un controlID créer par le script lui-même.

Opt("SendKeyDelay",...) modifie la durée de la pause entre les envois de touches.
Opt("SendKeyDownDelay",...) modifie la durée de maintien d'une touche avant qu'elle ne soit relâchée pendant une frappe clavier.

En relation

ControlCommand, ControlFocus, ControlSetText, Send, SendKeyDelay (Option), SendKeyDownDelay (Option)

Exemple

Example()

Func Example()
    ; Exécute le Bloc-notes
    Run("notepad.exe")

    ; Attend 10 secondes pour que la fenêtre du Bloc-notes apparaisse.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

    ; Attend 2 secondes.
    Sleep(2000)

    ; Envoie une chaîne de texte au contrôle d'édition du Bloc-notes. Le handle retourné par WinWait est utilisé pour le paramètre "titre" de ControlSend.
    ControlSend($hWnd, "", "Edit1", "This is some text")

    ; Attend 2 secondes.
    Sleep(2000)

    ; Ferme la fenêtre du Bloc-notes en utilisant le handle retourné par WinWait.
    WinClose($hWnd)

    ; Maintenant, une fenêtre s'ouvrira et demandera d'enregistrer les modifications, le nom de classe de la fenêtre est appelé
    ; "#32770" et en simulant la touche "TAB" pour passer au deuxième bouton dans lequel "ENTER" est simulé pour ne pas "enregistrer le fichier"
    WinWaitActive("[CLASS:#32770]")
    Sleep(500)
    Send("{TAB}{ENTER}")
EndFunc   ;==>Example