FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Une calculatrice en une ligne de programme
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar jean_debord Aujourd'hui à 8:47

» Form(résolu)
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar leclode Hier à 17:59

» trop de fichiers en cours
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar Marc Hier à 11:42

» Bataille navale SM
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Gestion d'un système client-serveur.
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Fonctions d'envoyer de touches à un objet interne ou externe Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment :
Funko POP! Jumbo One Piece Kaido Dragon Form : ...
Voir le deal

 

 Fonctions d'envoyer de touches à un objet interne ou externe

Aller en bas 
5 participants
Aller à la page : 1, 2, 3, 4, 5, 6  Suivant
AuteurMessage
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 14:43

J'ai intégré les fonctions d'envoi de touches à KGF.dll:

V1.50 06/09/2012 ajout fonctions d'envoi de caractères à un objet
SendString, SendStringChild
SendStringAsChars, SendStringChildAsChars
SendSingleChar, SendChildSingleChar

J'ai fait un effort particulier au niveau de la doc. On peut travailler et 3 modes différents:
1. envoyer une seule touche selon les codes VK_xxx (documentées dans KGF.hlp)
2. envoyer une chaîne de caractères contenant une suite de ces touches
3. envoyer une chaîne de caractères de texte brut

On peut avoir deux types de cibles:
1. un objet identifié par son handle
2. une fenêtre fille d'un objet identifiée par son handle

Ce deuxième type de cible n'a un intérêt que si l'on s'adresse à un programme externe au programme Panoramic qui émet l'appel.

Prenons le cas du NotePad:
Si l'on envoie une chaîne au handle du NotePad, cela remplace le titre de la fenêtre du Notepad !
Si l'on envoie la même chaîne à la fenêtre fille du handle du NotePad, elle apparaît bien dans la zone de texte.



Dernière édition par Klaus le Lun 10 Sep 2012 - 17:26, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 18:56

Merci Klaus,
Je prendrais tout mon temps pour voir le résultat, surtout que c'est moi qui en est parlé.

Pour l'instant, je viens par acoupt sur mon ordi, et je ne peux pas regarder.
Par contre j'ai eu du mal de trouver l'aide. J'ai été sur l'index et taper Send... pour voir apparaitre les fonctions. Je n'ai pas trouvé la bonne rubrique.

Dès que je peux je fais des essais.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 19:34

Voilà ce qu'il faut faire:

Double-clic sur KGF.hlp:
Fonctions d'envoyer de touches à un objet interne ou externe Aa120

Double-clic sur "Sommaire":
Fonctions d'envoyer de touches à un objet interne ou externe Aa210

Double-clic sur "Fonctions d'envoi de touches"
Fonctions d'envoyer de touches à un objet interne ou externe Aa310

Puis clic sur une des six fonctions listées en bas (exemple: la première):
Fonctions d'envoyer de touches à un objet interne ou externe Aa410

Tout est bien là.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 21:45

Merci pour l'explication. La solution est l'appui sur sommaire. Il y en a déjà un en marge, celui-là je ne l'avais pas vu
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 22:43

Voici un petit programme qui permet de voir l'utilisation de certaines de ces fonctions:
Code:
' test_envoi_touches.bas

label go

dim notepad%, i%, s$

dll_on "KGF.dll"

edit 1 : top 1,10 : left 1,10 : width 1,300

button 2 : top 2,50 : left 2,10 : caption 2,"Go" : on_click 2,go

end

go:
execute "notepad.exe"
pause 500
notepad% = handle_form("Sans titre - Bloc-notes")

s$ = "Pour EDIT"
i% = dll_call2("SendString",handle(1),adr(s$))

s$ = "Nouveau titre"
' le texte suivant va dans la caption de la form du Notepad !
i% = dll_call2("SendString",notepad%,adr(s$))

s$ = "Texte pour Notepad"
' le texte suivant va dans la form du Notepad !
i% = dll_call2("SendStringChild",notepad%,adr(s$))

s$ = chr$(18)+"F"
' envoi ALT F à Notepad (ouvrir le menu Fichiers
i% = dll_call2("SendStringChildAsChars",notepad%,adr(s$))

return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 22:57

Je viens d'essayer, j'ai le message suivant:
(29) Expression arithmétique incorrecte : Erreur dans une fonction. Line : 21
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 23:24

Tu es certain d'utiliser la bonne version ? V1.50 ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyJeu 6 Sep 2012 - 23:52

Oui ça marche.
Tu es chiant, j'ai téléchargé à 14h33, et à 14h43, tu remets la version.

Par contre j'ai eu du mal de poster depuis l'essai. A chaque fois que j'essayais d'écrire, j'avais (je mets des accolades à la place de []{center}{/center} à la place des caractères.

Je enfin compris qu'il fallait que j'appuie sur ALT pour sortir de ce problème.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 0:04

Eh oui. J'avais bien dit dans la doc que l'état des touches SHIFT, CONTROL et ALT est géré comme une bascule? Et si on envoie ALT, par exemple, sans envoyer un autre ALT derrière, Windows croit que la touche ALT est toujours enfoncée.

Lorsque tu frappes toi-même sur ALT, cela envoie un premier message KEY_DOWN pour ALT à Windows. Ce message est ignoré - Windows croit savoir que ALT est déjà enfoncé. Mais lorsque tu relâches la touche, cela envoie un KEY_UP pour ALT à Windows, et là, Windows le prend en compte correctement.

Si tu envoies un autre ALT par programme, le problème disparaît. Enn fait, ce n'est pas un problème, mais le fonctionnement normal de ces routines. Elles simulent des frappes de touches au clavier. Et pour cela, je gère SHIFT, CONTROL et ALT de la même manière - premier coup: on enfonce la touche et on la garde enfoncée, second coup: on relâche la touche.

Bon, il suffit de le savoir pour pouvoir le gérer correctement.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 16:21

Regardes Klaus, j'ai l'impression que les fonctions que tu présentes, ne correspondent pas avec l'exemple fourni.
Ainsi je vois:
Citation :
res% = dll_call2("SendString",hnd%,adr(txt$))
et dans l'exemple:
Citation :
res% = dll_call2("SendStringAsChars",handle(0),adr(txt$))
Il y en a plusieurs comme cela.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 16:26

Corrigé. Merci !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 16:48

Klaus, je n'arrive pas à faire la même chose avec le clavier qu'AutoIt.
Pourquoi cette histoire de handle.
Je ne cherche que la simulation de clavier, ce que je faisais habituellement avec AutoIt. Si je veux envoyer des codes sur une page Internet, je ne vois pas, alors qu'avant c'était très simple.

Autre chose, c'est quoi, cette série de code qu'on reçoit par exemple avec:
Code:

dim dll$  :  dll$="KGF.dll"

dim res%, hnd%,car$  , handle%
dll_on dll$
car$= "salutations pour le travail"  :' VK_TAB
wait 5000  :' le temps de cliquer sur une autre fenêtre
res% = dll_call2("SendStringAsChars",handle%,adr(car$))
dll_off
En ayant cliqer sur PsPad entre temps pour écrire dessus, cela m'ouvre le fichier d'aide de PsPad, et ensuite je reçois: 119/. / 5 119.
Je vais faire une grosse pause.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 17:06

Tu n'as pas chargé handle% avant d'appeler la fonction. Toutes mes fonctions envoient des touches ou tu texte à un objet Windows identifié par un handle. Et ce handle doit évidemment être connu auparavant.

Essaie ceci (en adaptation de ton code):
Citation :

dim dll$ : dll$="KGF.dll"

dim res%, hnd%,car$ , handle%
dll_on dll$
car$= "salutations pour le travail" :' VK_TAB
wait 5000 :' le temps de cliquer sur une autre fenêtre
handle% = ... ici, mettre le handle de la fenêtre sur laquelle on veut envoyer les touches...
' tu peux faire cela par exemple par handle% = handle_form("... caption de la form visée ..;")
res% = dll_call2("SendStringAsChars",handle%,adr(car$))
dll_off

D'autre part, tu n'utilises pas la bonen fonction. Les fonctions avec le mot Char dans le nom envoient des caractères de commande définis par la table des codes VK_xxx (elle est dans la foc). Or, tes caractères miniscules sont justement des codes de ce genre, pour certains.

Si tu veux envoyer tu texte simple, utilise plutôt la fonction SendString ou éventuellement SendStringChild. Ces fonctions envoient le texte tel qu'il est, sans l'interpréter. Dans ton cas, ce serait:
Code:
res% = dll_call2("SendString",handle%,adr(car$))
pour un envoi à la fenêtre identifiée par handle%, ou
Code:
res% = dll_call2("SendStringChild",handle%,adr(car$))
pour un evoi à la fenêtre fille de cette fenêtre (comme pour NotePad, par exemple).
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 17:54

Pour la bonne fonction, j'en ai essayé plusieurs, et j'ai pris la dernière qui était en cours.
Pourquoi vouloir absolument associer un handle. C'est ça que je ne comprend pas. Comment veux-tu connaitre celui-ci par exemple pour une page internet, ou un programme dont tu ne connais le titre, ou que tu n'as pas de référence?

Avec AutoIt je fais d'abord une sélection soit par un clic sur une fenêtre ou un objet, et ensuite j'envoie les caractères, et les caractères que j'envoie, sont comme si je tapais sur mon clavier. Le clavier n'a pas a savoir où je tape, c'est le programme qui le guide avant. Au peu, si il n'y a pas de Handle, par le jeu de <ALT TAB> sélectionner le programme qui doit recevoir les touches. Le clavier, c'est le clavier! Je veux une simulation de clavier. Si tu ne peux pas c'est pas grave, vu qu'AutoIt le fais. A partir de là, je peux même proposé un programme en temps voulu qui avoir cette possibilité, mais si tu peux simplement faire une simulation d'appui de touches sans le handle, tu laisses ce que tu as fait, car c'est utile, et tu fais une fonction send touche$ sans plus. La sélection de la fenêtre ou de l'objet, on le fait à part. Là, je ne peux pas me servir de tes fonctions. Tu avais dis que si le handle est était à 0, on en avait pas besoin (enfin moi je l'ai compris comme celà).
Si c'est problèmatique, tu le dis et tu laisses tomber. Je suis le seul demandeur, et je sais comment procéder. Tu n'as pas d'ordre a recevoir de moi. Tu le fais comme tu l'entends.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 18:51

Oups ... j'avais oublié ce truc du handle à zéro pour cibler l'objet ayant le focus...

C'est rétabli. Si tu passes explicitement 0 ou une variable ayant la valeur 0, le texte ira alors à l'objet ayant le focus, dans la form qui est en foreground.

Et pour faciliter les choses, j'ai ajouté une fonction:
Code:
res% = dll_call0("GetActiveControl")
Cette fonction retourne justement le handle du contrôle actif, quelque soit le programme (Panoramic ou étranger) et quelque soit la form. Elle cherche toujours la form en foreground, et dans cette form, l'objet ayant le focus. Si vraiment rien n'est trouvé, la fonction retourne 0, ce qui signifie le bureau.

On peut utiliser cette fonction pour surveiller par exemple si un objet particulier a gardé le focus ou non. Mais pour envoyer des touches ou du texte simple à l'objet ayant le focus, ce n'est pas nécessaire: la valeur 0 suffit à la place du handle.

KGF.dll passe à la version V1.51 du 07/09/2012.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 20:09

C'est pas encore cela. Je t'ai répondu, mais j'ai fermé l'onglet par mégarde, donc:
Avec NotePad ça marche
Bien pour la fonction de récupérer le handle. Au poil!
Mais j'ai essayé de plusieurs façon, et c'est la forme Panoramic exécut qui reçoit le clavier.
Mais tu n'es pas loin de russir, car avec le programme, en testant de différentes manières dont voici le dernier jet:

Code:

dim dll$  :  dll$="KGF.dll"
' execute "notepad.exe"
' pause 500
' notepad% = handle_form("Sans titre - Bloc-notes")
dim res%, hnd%,car$  , handle%

dll_on dll$
pause 5000
res% = dll_call0("GetActiveControl")
handle%=res%
' handle%=0
car$= chr$(9)+"salutations pour le travail. Regardes moi bien dans les yeux:... je t'embrasse, (et je n'en suis pas)"  :' VK_TAB
' res% = dll_call2("SendStringChild",handle%,adr(car$))
res% = dll_call2("SendString",handle%,adr(car$))
dll_off
Je vois que le teste est passé (je l'ai envoyé dans la fenêtre pour te répondre:
Fonctions d'envoyer de touches à un objet interne ou externe 2012-012
Voila. voila!
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 23:16

s-tu essayé ceci:
Code:
' test_envoi_touches.bas

label go

dim notepad%, i%, s$

dll_on "KGF.dll"

edit 1 : top 1,10 : left 1,10 : width 1,300

button 2 : top 2,50 : left 2,10 : caption 2,"Go" : on_click 2,go

end

go:
execute "notepad.exe"
pause 1000
notepad% = handle_form("Sans titre - Bloc-notes")

s$ = "Pour EDIT"
i% = dll_call2("SendString",handle(1),adr(s$))

s$ = "Nouveau titre"
' le texte suivant va dans la caption de la form du Notepad !
i% = dll_call2("SendString",notepad%,adr(s$))

s$ = "Texte pour Notepad"
' le texte suivant va dans la form du Notepad !
i% = dll_call2("SendStringChild",notepad%,adr(s$))

s$ = chr$(18)+"F"
' envoi ALT F à Notepad (ouvrir le menu Fichiers
i% = dll_call2("SendStringChildAsChars",notepad%,adr(s$))

return

Ce programme montre comment on envoie un texte dans un EDIT du même programme, comment on remplace le titre d'une fenêtre NotePad (!), comment on envoie du texte dans la partie texte du NotePad, et comment on ouvre le menu Fichier du Notepad. Tout ceci sans positionner le curseur, sans clic simulé, juste en envoyant des touches...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptyVen 7 Sep 2012 - 23:53

Avec le notepad, j'ai pas de problème, ni pour la forme Panoramic.
C'est avec internet, que cela ne marche pas.
Ce qui est curieux, en regardant le WindowInfo, c'est que le texte passe, mais ne s'affiche pas! On voit le texte dans la partie texte dans l'image, mais pas dans Poster une réponse.
Je ne sais pas où cela va. Tous les disons faux objets de la fenêtre ont la même class. Seul l'instance change.
La barre des menus c'est 3, celui de la navigation est 2, des onglets c'est 1, le reste est principalement 18.
Je ne vois aucune différence entre poster une réponse, les smileys, enfin tout ce qui est en dessous des onglets.

Je ferais un essai avec Autoit pour voir si il y a une différence.
Revenir en haut Aller en bas
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptySam 8 Sep 2012 - 0:08

Laisses tomber: Avec AutoIt, j'ai le même résultat pour internet. C'est pas la bonne solution.
Merci de ta patience.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptySam 8 Sep 2012 - 0:24

Je suis en train de faire des tests approfondis, car GetActiveControl n'est pas si infaillible que ça...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptySam 8 Sep 2012 - 1:45

Ca y est - je crois que j'y suis arrive.

V1.52 08/09/2012 correction d'un bug avec SendString et SendStringChild

On peut maintenant envoyer du texte à n'importe quelle zone de saisie qui a le focus - un EDIT di programme en cours, la fenêtre de saisie de Notepad, la fenêtre de saisie de Word, de Notepad++, ...

Voici la démo complétée. Lance d'abord le programme dans lequel tu veux récupérer du texte. Puis lance le programme de démo. Clique sur le bouton - tu disposes d'un PAUSE 1000 pour mettre ton programme cible en avat-plan et de cliquer dans la zone dans laquelle tu veux récupérer le texte. Si le délai est trop court, rallonge-le à la ligne 16, immédiatement après le label go: . Tu verras un message s'inscrire dans le champ de saisie choisi, via l'envoi avec handle 0 pour "zone ayant le focus". Ensuite, NotePad va s'ouvrir. Son titre sera change, et le menu Fichiers s'ouvre. Clique alors sur ALT pour fermer le menu Fichiers, et tu verras du texte envoyé à NotePad via son handle. Et tu verras aussi que le EDIT du programme de Panoramic a re_u aussi un message, via son handle.
Code:
' test_envoi_touches.bas

label go

dim notepad%, i%, s$

dll_on "KGF.dll"

edit 1 : top 1,10 : left 1,10 : width 1,300

button 2 : top 2,50 : left 2,10 : caption 2,"Go" : on_click 2,go

end

go:
pause 1000
s$ = "Texte pour Word"
' le texte suivant va dans la form active qui est censée être Word
' ou n'importe quel autre programme avec un champ de saisie ayant le focus
i% = dll_call2("SendString",0,adr(s$))
pause 300

execute "notepad.exe"
pause 1000
notepad% = handle_form("Sans titre - Bloc-notes")

s$ = "Pour EDIT"
i% = dll_call2("SendString",handle(1),adr(s$))

s$ = "Nouveau titre"
' le texte suivant va dans la caption de la form du Notepad !
i% = dll_call2("SendString",notepad%,adr(s$))

s$ = "Texte pour Notepad"
' le texte suivant va dans la form du Notepad !
i% = dll_call2("SendStringChild",notepad%,adr(s$))

s$ = chr$(18)+"F"
' envoi ALT F à Notepad (ouvrir le menu Fichiers
i% = dll_call2("SendStringChildAsChars",notepad%,adr(s$))

' message "fait"

return

Rien n'a changé dans la façon d'utiliser les fonctions, et la don n'est pas changée non plus. Juste une correction de bug.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptySam 8 Sep 2012 - 7:34

Bien, mais comment fais-tu pour envoyer <CTRL>v
j'ai essayé chr$(17)+"v" et
Code:
  s$="VK_CONTROL v"
  i% = dll_call2("SendString",handle(0),adr(s$))
J'ai essayé de le récupérer dans le memo d'à côté, juste pour savoir si c'était bon, mais rien.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptySam 8 Sep 2012 - 11:04

Il fait construire une chaîne de caractères dans laquelle chaque caractère est une représentation décimale entr 0 et 255 du VK code corrspondant. Voici ce que dit KGF.hlp sur la touche CONTROL:
Citation :
17: VK_CONTROL 17 CTRL key
Donc, la valeur décimale 17 signifie CONTROL.

Ensuite, il faut se souvenir que les touches SHIFT, CONTROL et ALT sont des bascules qui changent simplement de position chaque fois qu'on envoie ces touches. Donc, en conséquence, pour envoier ctrl_v, tu fais ceci:
Code:

dim s$
s$ = chr$(17) + "v" + chr(17)
et tu utilises la fonction SendStringAsChars. L'effet sera le suivant:
1. le premier caractère place le clavier en mode CONTROL
2. le second caractère sera transmis en ctrl-v
3. le troisième caractère enlève le mode CONTROL du clavier (sinon, tout caractère envoyé par la suite comme ctrl-x, même ce qui est frappé réellement au clavier.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptySam 8 Sep 2012 - 13:00

ça ne marche pas. Tu es sure que hande avec 0 comme paramètre fonctionne?
J'ai essayé plusieurs handle, mais il n'y a pas de copie dans le memo 2. De plus après un item_add, il y a normalement un saut de ligne, là cela s'écrit à la suite.

Code:

label go
dim envoi$ ,i%,s$ ,handle% , version$

dll_on "KGF.dll"
version$ = DLL_call1("KGFdllVersion",adr(version$))
message version$  :' reçoit 151
list 1:width 1,250
item_add 1,"panoramic@klausgunther"+chr$(9)+"panoramic123"
item_add 1,"panoramic@cosmos70"+chr$(9)+"panoramic123"
memo 2:left 2,210
handle%=handle(2)
on_click 1,go
' execute "http://www.mydrive.ch/login"
end
go:
  envoi$= item_index$(1)
  caption 0, envoi$
  clipboard_string_copy envoi$
  clipboard_paste 2  : ' dans un premier temps
  wait 2000
  set_focus 2
  s$= chr$(17) + "v" + chr$(17)
  i% = dll_call2("SendStringAsChars",handle%,adr(s$))
  item_add 2,"2ème envoi"  :' pourquoi pas de saut à la ligne? c'est pas habituel
  i% = dll_call2("SendString",handle%,adr(envoi$))
  item_add 2,"----------------"
return
' plusieurs choses: il ne se passe rien avec les fonctions.
' avec item_add, il n'y a pas de saut ligne suivante
Je commence à penser que je suis bouché! Shocked ou je me trompe elephant à moins que drunken
rendeer
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe EmptySam 8 Sep 2012 - 14:22

OK. J'ai vu le problème et je m'en occupe. J'étais tellement content d'avoir réussi à envoyer correctement vers un programme externe que je ne me suis pas rendu compte que ça ne marche plus vers un objet du programme lui-même...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Fonctions d'envoyer de touches à un objet interne ou externe Empty
MessageSujet: Re: Fonctions d'envoyer de touches à un objet interne ou externe   Fonctions d'envoyer de touches à un objet interne ou externe Empty

Revenir en haut Aller en bas
 
Fonctions d'envoyer de touches à un objet interne ou externe
Revenir en haut 
Page 1 sur 6Aller à la page : 1, 2, 3, 4, 5, 6  Suivant
 Sujets similaires
-
» Click sur un objet externe a Panoramic
» Click sur un objet externe a Panoramic
» Lecture d'un objet externe à Panoramic.
» [Résolu] Interception touches quel que soit objet Panoramic
» Détermine si oui ou non un objet est PARENT d'un autre objet

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: