[R] caractère "é" tapé à la place de "2"

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[R] caractère "é" tapé à la place de "2"

#1

Message par jpascal »

Bonjour,

J'utilise (encore) Internet Explorer pour saisir des données de formulaire sur un site.

Dans un des champs je dois saisir un numéro formé de plusieurs chiffres.

J'utilise ce code :
$sCode = "1234"
   $oText = _IEGetObjById($g_oIE, "Code")
   _IEAction($oText, "focus")
   Sleep(2000)
   ControlSend($hwnd, '', '[CLASS:Internet Explorer_Server; INSTANCE:1]', $sCode, $SEND_RAW)
   Sleep(1000)

Malheureusement il arrive parfois qu'à la place du premier chiffre soit tapé un autre caractère (celui qui correspond à la touche du haut du clavier mais sans l'appui simultané de la touche Shit).
Exemple : au lieu de saisir 2345, AutoIt saisit é345

Comme vous pouvez le constater, j'ai ajouté un Sleep(2000) avant la saisie du texte et j'ai utilisé le paramètre $SEND_RAW, sans succès.
J'utilise ControlSend() car _IEFormElementSetValue() ne fonctionne pas.

Peut-être faut-il que je change le paramétrage de saisie des caractères avec SendKeyDelay ou SendKeyDownDelay ?
Avez-vous déjà rencontré ce bug aléatoire ?
Modifié en dernier par jpascal le sam. 10 avr. 2021 23:24, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 103
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: [..] caractère "é" tapé à la place de "2"

#2

Message par Nine »

Oui, j'ai déjà vu ça sur le site anglo. Un gars avait exactement le même problème que toi. C'était dû au fait qu'il utilisait son clavier ou sa souris pendant que le script fonctionnait. Si c'est ton cas, il a résolu le problème en utilisant mon UDF BlockInputEX pendant le ControlSend.

Voici le lien où le gars explique son problème :

https://www.autoitscript.com/forum/topi ... sometimes/
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] caractère "é" tapé à la place de "2"

#3

Message par jpascal »

Je connais ton UDF. J'ai dû l'utiliser par le passé. ;-)

Je vais tester sachant que le clavier n'est pas utilisé lors de la saisie auto. Mais si la souris peut être la cause du dysfonctionnement, cela solutionnera mon problème.

Je fais un retour dès que possible. Merci.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] caractère "é" tapé à la place de "2"  

#4

Message par TommyDDR »

Vous pouvez aussi transformer 1 2 3 ... 9 en {NUMPAD1 2 3 ... 9} tout en échappant les symbols spéciaux (^ ! + #) et ne plus utiliser $SEND_RAW :
$sCode = getKeys("1234")
$oText = _IEGetObjById($g_oIE, "Code")
_IEAction($oText, "focus")
Sleep(2000)
ControlSend($hwnd, '', '[CLASS:Internet Explorer_Server; INSTANCE:1]', $sCode, $SEND_RAW)
Sleep(1000)

Func getKeys($text)
   Local $ret = ""
   Local $temp
   For $i = 1 To StringLen($text)
      $temp = StringMid($text, $i, 1)
      If (Asc($temp) >= Asc("0") And Asc($temp) <= Asc("9")) Then
         $temp = "{NUMPAD" & $temp & "}"
      ElseIf ($temp == "{") Then
         $temp = "{{}"
      ElseIf ($temp == "!") Then
         $temp = "{!}"
      ElseIf ($temp == "^") Then
         $temp = "{^}"
      ElseIf ($temp == "#") Then
         $temp = "{#}"
      ElseIf ($temp == "+") Then
         $temp = "{NUMPADADD}"
      EndIf
      $ret &= $temp
   Next
   Return $ret
EndFunc   ;==>getKeys
Après relecture, pourquoi utiliser ControlSend dans une fenêtre IE et ne pas utiliser directement les fonctions _IExxx pour écrire ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] caractère "é" tapé à la place de "2"

#5

Message par jpascal »

Petit retour : l'utilisation de l'UDF BlockInputEX semble corriger le problème. Je n'ai en revanche pas assez de recul pour dire que cela fonctionne à 100%.

TommyDDR, quelle bonne idée. J'ai honte de ne pas y avoir pensé.
Comme indiqué dans mon message initial "J'utilise ControlSend() car _IEFormElementSetValue() ne fonctionne pas.". Ou plutôt est-ce dû à la conception du site qui ne prend pas en compte les données de ce champs lors de l'enregistrement de la page si elles n'ont pas été tapées (je ne suis pas au travail pour le vérifier).

Merci à vous deux pour vos solutions complémentaires qui me serviront tout autant selon la situation et le besoin du moment.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre