Page 1 sur 1

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

Posté : mar. 30 mars 2021 12:14
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 ?

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

Posté : mar. 30 mars 2021 13:54
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/

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

Posté : mar. 30 mars 2021 14:59
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.

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

Posté : mer. 31 mars 2021 22:07
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 ?

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

Posté : sam. 10 avr. 2021 23:23
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.