Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

chiffres et methode SendKeys

12 réponses
Avatar
Ernest
Bonjour,
j'ai un probl=E8me sur une application html (hta) dont le comportement
n'est pas r=E9gulier, je n'arrive pas =E0 trouver la solution ni la
cause.
L'application utilise la methode SendKeys pour =E9crire du texte dans
une fen=EAtre Bloc-notes mais lorsqu'il s'agit d'=E9crire des chiffres ,
irr=E9guli=E8rement en fonction du caps-lock elle =E9crit des & =E9 " ' ( -
=E8 _ =E7 =E0 ) =3D ou bien les chiffres attendus. Des fois on obtient le
bon r=E9sultat avec le caps-lock activ=E9 et des fois avec le caps-lock
d=E9sactiv=E9 ...
je n'arrive pas =E0 comprendre pourquoi ni =E0 trouver un test pr=E9alable
qui fonctionne dans tous les cas.
Actuellement j'effectue les tests sur un portable mais l'application
devrait =EAtre utilis=E9e sur tout autre type de clavier.
Si quelqu'un a une id=E9e Merci beaucoup pour votre aide.
Ernest

10 réponses

1 2
Avatar
sympatix
Bonjour,
j'ai un problème sur une application html (hta) dont le comportement
n'est pas régulier, je n'arrive pas à trouver la solution ni la
cause.
L'application utilise la methode SendKeys
.../...


Bonjour !

Essaye peut-être de remplacer l'envoie des chiffres par leurs code ASCII, à
l'aide de la fonction Chr.
(Pour les chiffres de 0 à 9, les caractères ASCII vont respectivement de 48
à
57)

Par exemple, pour envoyer 1:
SendKeys Chr (49)
etc...

Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

Avatar
Ernest
Merci :o)
le problème est que les chiffres sont toujours des résultats contenus
dans des variables, impossible de savoir à l'avance de quels chiffres
il s'agit. Je ne dis pas que ce soit impossible d'utiliser dans ce cas
Chr mais alors avec un algo qui me semble assez compliqué...
Avant de me résigner à cette solution je vais attendre un peu de
chercher une autre
Avatar
sympatix
Merci :o)
le problème est que les chiffres sont toujours des résultats contenus
dans des variables, impossible de savoir à l'avance de quels chiffres
il s'agit. Je ne dis pas que ce soit impossible d'utiliser dans ce cas
Chr mais alors avec un algo qui me semble assez compliqué...
Avant de me résigner à cette solution je vais attendre un peu de
chercher une autre


Je te conseille peut-être de publier le script (ou un extrait), à la lumière
du contexte de travail, une approche plus spécifique du problème pourra être
envisagée.

--
Cordialement
Sympatix
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

Avatar
Do Re Mi chel La Si Do
Ouaip ! Tu as raison. J'ai comme un méchant doute sur ce qui est vraiment
envoyé...

Le script ! Le script ! Le script !
Avatar
Ernest
Merci:o)
Je vous donne l'état de mes recherches en rappelant que le
comportement semble être irrégulier et que si des fois j'ai obtenu le
bon résultat je ne suis pas pour autant certain que cela se reproduise
toujours ainsi.
J'ai fait un module de test spécifique du problème et j'ai remarqué
2 choses :
1) si c'est la fenêtre principale qui ouvre Bloc-notes et effectue
l'écriture les chiffres semblent passer toujours bien indépendament
de l'état du caps-lock. Malheureusement dans l'application c'est une
fenêtre fils qui execute les instructions et là le problème se pose.
2) si j'enlève de l'entête les parametres hta et je laisse uniquement
<HTA:APPLICATION ID="oMyApp"> les chiffres semblent passer toujours
bien indépendament de l'état du caps-lock. Mais j'ai quand même
besoin de ces paramètres, je doute que toutes les valeurs par défaut
soient celles dont j'ai besoin.
Merci encore pour votre aide, voici le code

<HTML><HEAD><TITLE>Test SendKey</TITLE>
<HTA:APPLICATION ID="oMyApp"
APPLICATION="yes"
SELECTION="no"
SCROLL="no"
APPLICATION CONTEXTMENU="no"
BORDERSTYLE="complex"
CAPTION="yes"
SHOWINTASKBAR="yes"
SINGLEINSTANCE="yes"
SYSMENU="yes"
minimizeButton="yes"
maximizeButton="no"
WINDOWSTATE="normal">
<SCRIPT language="JavaScript">
<!--
var w = new ActiveXObject("WScript.Shell");
function ouvrir()
{
fenetre=window.open("","isolepiece","width00,height00,scrollbars =yes,resizable=yes,status=yes");
fenetre.document.open();
fenetre.document.writeln('<HTML><HEAD><TITLE>Test chiffres /
SendKey</TITLE><SCRIPT language="JavaScript">
function
saisies(){document.valeur.chiffree.value=Math.round(Math.random()*10000); window.opener.w.run
("Notepad",3);
setTimeout("window.opener.w.Sendkeys(document.valeur.chiffree.value,1);",10 00);}
</SCRIPT></HEAD><BODY><CENTER><form name="valeur"><input type="text"
name="chiffree" size=5>
<input type="button" onClick="this.disable=true;saisies();"
value="Chiffres/Notepad"></form></center></body></html>');
fenetre.document.close();
}
//-->
</script>
</HEAD>
<body>
<CENTER>
<input type="button" onClick="ouvrir();" value="Lancer test">
</center>
</body>
</html>
Avatar
sympatix
Je te répond par courtoisie, vu que je n'ai pas de solution immédiate à te
proposer, mais tout au plus, des pistes et suggestions.

Comme ton script-test fonctionne chez moi aussi, le problème doit être lié
AMHA au processus qui génère la variable qu'envoie SendKeys.

Essaye de tracer l'état de cette variable (avec des MsgBox par exemple - ou
des alert, comme tu es en js) aux
endroits adéquats (avant l'envoi par sendkeys par exemple). Si, lors d'un
envoi erroné, la variable ne correspond effectivement pas au chiffre à
envoyer, on saura déjà que le problème viens de là. Sinon, c'est SendKeys
qui coince.

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Avatar
Ernest
Merci!
je ne connais pas la variable prédéfinie dont tu parles et ne
comprends pas bien la stratégie, peux-tu me donner la syntaxe des
tests à insérer ?
window.alert(AMHA); ?...
et puis, en reprenant le même script, à quels endrois mettrais-tu ces
tests ?
Je pense que si j'arrive à déterminer à l'avance le comportement du
script par rapport à l'état du caps-lock, il suffira de swicher
l'état par un SenKeys {CAPSLOCK} si nécessaire avant de poursuivre
pour obtenir toujours le bon résultat.
Avatar
sympatix
je ne connais pas la variable prédéfinie dont tu parles


Je reprend un extrait de ton 2e post:
.../...le problème est que les chiffres sont toujours des résultats contenus
dans des variables.../...

C'est de ces variables que je parle.
Si par exemple, ta variable s'appelle schmurtz, et que tu l'envoie par la
suite avec un Sendkeys (schmurtz); il te suffit de placer un alert
(schmurtz); avant la ligne ou est envoyé sendkeys, pour afficher l'état de
la variable à cet instant précis.

Sinon, AMHA = A Mon Humble Avis (c'est pas du scripting) :-)

Je pense que si j'arrive à déterminer à l'avance le comportement du
script par rapport à l'état du caps-lock, il suffira de swicher
l'état par un SenKeys {CAPSLOCK} si nécessaire avant de poursuivre
pour obtenir toujours le bon résultat.


Je ne sais pas si c'est la meilleure solution. On s'oriente là vers du
bricolage (AMHA). Il faut trouver pourquoi ça foire.
Trace déjà la variable comme indiqué plus haut, et tiens nous au courant.

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

Avatar
Ernest
Ok... merci.
en fait, la variable en question dans l'exemple proposé est le champ
document.valeur.chiffre­e.value
dont la valeur est constamment affichée et est bien en vue.
le script renseigne le champ avec une valeur numérique aléatoire
puis immédiatement après ouvre blocnotes et envoi cette valeur
par un sendkeys dans blocnotes. Dans ces conditions un alert du
champ donnera la valeur déjà en vue du champ <input type="text"
ce qui n'empechera pas à sendkeys de continuer à faire qu'à sa
tête.
La seule possible solution AMHA passerait par une lecture des
caractères envoyés dans le blocnote pour faire une comparaison
et déduire le comportement à cet instant de sendkeys avant de
switcher l'état du clavier si nécessaire pour obtenir le bon
résultat.
Mais pour faire tout ça il me faut pouvoir lire au moins un seul
caractère du blocnotes ouvert et là je ne sais pas comment faire.
Tu n'as pas une idée ?
Avatar
sympatix
Ok... merci.
en fait, la variable en question dans l'exemple proposé est le champ
document.valeur.chiffre­e.value
dont la valeur est constamment affichée et est bien en vue.
le script renseigne le champ avec une valeur numérique aléatoire
puis immédiatement après ouvre blocnotes et envoi cette valeur
par un sendkeys dans blocnotes. Dans ces conditions un alert du
champ donnera la valeur déjà en vue du champ <input type="text"
ce qui n'empechera pas à sendkeys de continuer à faire qu'à sa
tête.


Le problème, c'est que, comme tu l'as dit dans un de tes posts précédents,
l'erreur ne se produit que lorsque c'est ton appplication tièrce qui lance
notepad.
Il faudrait par conséquent que tu fasses les tests avec la variable, mais
avec le *script complet* qui génère l'erreur, attendre qu'elle se produise,
et constater.

La seule possible solution AMHA passerait par une lecture des
caractères envoyés dans le blocnote pour faire une comparaison
et déduire le comportement à cet instant de sendkeys avant de
switcher l'état du clavier si nécessaire pour obtenir le bon
résultat.


C'est faisable, en changeant de méthode: au lieu d'ouvrir une instance de
notepad, il faut créer un fichier texte, et écrire dedans avec FSO et
l'objet TextStream.
Mais je ne ferais pas comme ça, c'est du bidouillage, et ça ne te dira pas
d'où vient le problème.

Sinon, à tittre d'infos, quelques adresses utiles:

le script center de microsoft
http://www.microsoft.com/technet/scriptcenter/default.mspx

L'incontournable sîte de JC bellamy (ne traite que du vbscript, pas du
Jscript)
http://www.bellamyjc.org/fr/vbscript.html

Je n'arrive plus à trouver l'url de téléchargement de la doc script56.chm
(si quelqu'un l'a éventuellement).

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

1 2