Page 1 sur 1

[..] Coller du texte (Send()++)

Posté : sam. 05 déc. 2009 23:15
par Iste
Salutations.

J'utilise souvent la fonction Send(). Bon, pas tant que ca, car elle bug énormément chez moi...
Quand je Send() du texte, il arrive tres lentement, et rarement complet ! Manque toujours un bout -_-
Donc j'ai rusé, en faisant un Clicput() du texte, puis un Send('^v') !

Sauf que, déja ca détruit mon clip, que ca marche pas non plus a tout les coup, et que ca peut pas ControlSend()...

D'ou ma question, comment faire un Send() et un ControlSend() qui marche bien ?

Merci

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 03:17
par Tlem
Au lieu d'utiliser Send('^v'), pourquoi ne pas utiliser ClipPut ?
N'oublie pas aussi qu'il y à les fonctions _ClipBoard_xxxx. ;)

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 03:34
par Iste
Tlem a écrit :Au lieu d'utiliser Send('^v'), pourquoi ne pas utiliser ClipPut ?
Car ctrl+v ca copie pas, ca colle :P

Je ne cherche pas a copier du texte, mais a le coller, sans passe par la fonction Send(), trop hasardeuse chez moi

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 03:44
par Dididj
Regarde du coté de SendKeyDelay ou de SendKeyDownDelay ( je sais plus trop ^^ ). Il est fort probable que AutoIt "n'enfonce" pas les touches assez longtemps.
Aussi non pour ton problème de clip détruit fait bêtement un ClipGet() avant puis un ClipPut() à après.

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 12:38
par Iste
J'ai déja regardé du coté des options de send(), mais ca ne change rien, la fonction reste aussi aléatoire.
Pour le clipput() / Clipget() j'y ai déja pensé, mais c'est pas si simple. ClipGet() ne fonctionne que pour du texte et jouer avec Clipboard.au3 serait trop long, pour un résultat toujours pas au point

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 14:55
par Tlem
Iste a écrit :ctrl+v ca copie pas, ca colle :P
Hummm oui effectivement, je voulais dire ClipGet, mais à 3H00 du mat après un repas bien arrosé, je n'était pas tout à fait au point. ;)

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 15:38
par Dididj
Le faire a la main reste encore la meilleur solution :lol:

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 16:27
par Iste
Le but étant de pouvoir coller de longs documents générés en temps réel par mon script dans une zone de saisie quelconque, ca me semble bien moins pratique !

Bref, j'ai un petit logiciel de clavier virtuel qui offre la possibilité de taper le texte dans une zone de saisie, et de l'envoyer d'un coup. Ca fonctionne tres bien, aussi, je pense qu'il doit etre possible de faire la meme choe en au3... mais comment ???

Ca fait bien plus que 30minutes que je cherche ;)

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 19:06
par ayuckers
Bon j'ai peut être un début de solution, car moi aussi j'ai des souci avec les fonctions copier coller de Autoit.
En partant d'une UDF trouvé sur le forum anglais j'en ai extrait une fonction collé.
pour le moment sa ne fonctionne que si on a deja fait un CTRL+C
Le collé se fait dans un bloc Note, mais il est possible de l'adapter pour coller vers n'importe quel Control.

Tout tourne autour de la fonction : SendMessage()
Voici le resultat : (sauf erreur de ma part cette exemple fonctionne directement)
► Afficher le texte
Si quelqu'un veut bien m'aider a faire une UDF copier/ coller
J'ai juste extrait quelques fonctions de l'UDF : GuiRichEdit_0_5
On peut la récupèrer ici : http://www.autoitscript.fr/forum/viewto ... 74&start=0
Il y a plein de chose intéressante aux niveau du copier/coller/selection/stream.....

@Iste : il y une fonction qui pourrait t'intéressé : _GUICtrlRichEdit_StreamFromFile
bien sur il fraudas certainement l'adapter.

Du coup t'as question m'a fait planché sur une idée que j'avait et je croit que j'ai en partit résolu mes problème
reste plus qu'a tester sa demain :)

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 19:58
par Iste
Alors ca, c'est vraiment génial !

Meme si ca garde le probleme de destruction du clipboard, la possibilité d'envoyer tant de messages a des win, arf ! top coule !

Bref, si quelqu'un du plus doué que moi arrive a sauvegarder le clipboard pour le reconstituer, ca serait bricolé mais parfait :)

Enfin, l'idéal serait une fonction genre SendInput() qui ciblerai une fenêtre.. (mais déja l'original j'arrive pas a la faire tourner...)
Enfin, rien que pour le undo ca valait le coup ;)

Edit : Le fait de devoir récup l'id de l'edit est en fait trop pas assez souple pour moi :s

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 21:43
par Tlem
Il est difficile de voir le problème sans éléments supplémentaires.

Par contre je ne comprend pas pourquoi tu dit que la fonction ControlSend() est aléatoire ...
Si tu as bien donné les éléments de la destination du texte, l'ensemble du texte est envoyé au contrôle. :shock:

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 22:12
par Iste
Tlem a écrit :Par contre je ne comprend pas pourquoi tu dit que la fonction ControlSend() est aléatoire ...
Si tu as bien donné les éléments de la destination du texte, l'ensemble du texte est envoyé au contrôle. :shock:
Et bah justement, non ! Sur des ordi plus puissant je n'ai pas trop de souci, mais sur le mien, il manque presque a chaque foi des bouts de la chaine.

En fait, je cherche a générer du texte, que mon script récup d'après plusieurs page php de ma conception et quelque fichier. Il génère un joli rapport, puis bah...
Pour le moment il le met dans le clip, j'ai juste donc a faire CTRL+MAJ+V pour que le script agisse, puis CTRL+V pour coller le texte la ou j'écrivais. Ca peut etre un bloc note, un email, un forum, une fenêtre msn...

Bref, comme actuellement la destruction du presse-papier, et la manip assez galère m'ennuie (et qu'en plus j'ai souvent des souci a cause de ca), j'ai décider de poster pour avoir une alternative a Send(), et tant qu'on y est ControlSend() qui ne marche pas mieux chez moi.

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 22:30
par Tlem
En cherchant une solution, j'ai peut être trouvé le problème du ControlSend, ainsi qu'une alternative. Tout est dans le code à tester.
► Afficher le texte

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 22:50
par Iste
A 1er vu, ControlSend() et Send() est toujours aussi peu fiable, de plus je dois jouer avec plusieurs Send(), quand j'ai besoin des "special characters" ^^' (pour les raccourcis clavier)

ControlSetText() marche très bien, mais il me faut connaitre les controlID et tout et tout, ce qui au final, bah c'est pas plus rapide. De plus, ca pose certain problème avec certaines zones de saisies.

Edit : Avec le flag1 comment faire des majuscules ? Send("Salut ??") ecris "salut ,," :/

Re: [..] Coller du texte (Send()++)

Posté : dim. 06 déc. 2009 23:28
par aikiox
Bonjour,
Je tiens a remercier Iste car il m'a beaucoup aidé puisque je n'arrivais pas à ecrire à partir d'un script vers une page html, il y ecrivait des chiffres tandis que je gardais le meme code mais quand j'ecrivais dans le notepad il n'y avait aucun problème.
Grace à Clipput, j'ai reussi a contourner le problème. Effectivement, la fonction send pose quelques problèmes...
► Afficher le texte
Voici le code

Cordialement
Romain

Re: [..] Coller du texte (Send()++)

Posté : lun. 07 déc. 2009 00:43
par Tlem
@aikiox
N'oubliez pas les balises de code lorsque vous écrivez du code dans vos messages, même si vous utilisez le Spoiler.

@Iste
J'ai vraiment du mal à comprendre ton problème.
Si tu as un texte à coller dans un zone de saisie, il faut que cette zone soit active pour pouvoir y faire un CTRL+V. :roll:
Et si tu décide d'envoyer le texte directement au contrôle, tu sera obligé de récupérer l'ID du contrôle. Donc il faut que tu choisisse la méthode : Ou bien par un CTRL+V ou bien par l'envoi du texte directement au contrôle.

Aux vues de ce que tu as décrit, le CTRL+V semble la solution la plus fiable.
Donc personnellement, je chercherais à faire un script résident qui réagirait au clic d'un contrôle si par exemple une combinaison de touche est enfoncée en même temps que le clic, alors un CTRL+V est effectué dans ce contrôle.
Maintenant, il y à sans doute d'autres manières de voir les choses, mais cela dépend de tes besoins et de comment est organisé ton travail. ;)

Re: [..] Coller du texte (Send()++)

Posté : lun. 07 déc. 2009 01:01
par Iste
Oui oui, me suis mal exprimer, ControlSetText() marche parfaitement pour remplacer ControlSend() (enfin, presque. Pour tout ce qui est zone de saisie clasique c'est niquel, mais pour un navigateur internet, ou une interface flash ou autre...)

Ensuite, oui Ctrl+V marche bien (manuellement) une foi que j'ai Clipé le texte. Mais automatiser le Ctrl+V ne marche pas a tout les coups (bah ouais, Send() quoi..)
Donc si je poste, c'est car la destruction du clipboard + Le collage, c'est trop d'incertitude pour moi.

Actuellement, je peux me débrouiller avec ce que j'ai récup dans ce post. Toutes fois, ca ne règle pas la question de façon général.
Pour dire que je suis pas bloqué, mais toujours (presque) aussi avancé qu'avant.

Bref, pour résumer :

Pour remplacer le Send()... Bah j'en suis au meme point :
Obligé de passer par un clipput() + Send("^v") = destruction du clip + Résultats non sûrs sur le coller

Pour remplacer le ControlSend(), c'est un peu mieux :

Pour tout ce qui est classique, ControlSetText() est super, mais pour toute les autre situation...
Me faut donc un moyen de "simuler" un controlsend() (qui rappelons, simule une frape clavier vers une fenetre non active)


Donc voila, rien d'urgent, j'ai réussi a m'en passer jusque la, notamment grâce a des fonctions de vérifications, car les fonction Send() et ControlSend() font bien ce que je veux, juste pas a tout les coup... mais je me suis dis qu'il était temps de venir demander ici, au cas ou je me bloque pour rien...
Bref vala

Re: [..] Coller du texte (Send()++)

Posté : lun. 07 déc. 2009 01:28
par Tlem
Hummm, difficile d'aider plus, car je n'ai personnellement pas rencontré les mêmes problèmes que toi avec les fonctions dont tu parle.
Mais peut être quelqu'un d'autre a trouvé une solution. ;)