|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Saisie possible dans un contrôle / une fenêtre WINDOWS ? |
| Débuté par Michel, 01 mai 2017 13:16 - 4 réponses |
| |
| | | |
|
| |
Membre enregistré 127 messages |
|
| Posté le 01 mai 2017 - 13:16 |
Bonjour,
Je cherche à savoir depuis un programme WINDEV (appelé par exemple par une touche de fonction au cours d'une saisie dans un autre programme WINDOWS) si :
* la zone (contrôle, fenêtre ...) "en cours" à l'écran (écran d'un autre programme WINDOWS qui est complètement indépendant de mon programme WINDEV ) permet la saisie clavier ...
* ... de façon à pouvoir injecter (par programmation WINDEV) une chaine dans cette zone de saisie de "l'autre programme WINDOWS").
En clair : la "zone en cours" à l'écran permet-elle la saisie clavier ?
Ceci par le biais d'une API, d'un handle ou je ne sais trop ...
Le but étant que la suite du programme WINDEV d' "injection de chaine" ( -> affichage IHM, ... ) ne soit exécutée QUE -!!- si je suis dans une zone - WINDOWS - permettant la saisie clavier.
Vous remerciant,
Mike |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 954 messages |
|
| Posté le 01 mai 2017 - 14:49 |
Coucou,
En esperant que cela occupera ta journée (je n'ai pas tester)
https://www.developpez.net/forums/d77467/c-cpp/outils-c-cpp/cppbuilder/remplir-champs-d-application/
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 96 messages |
|
| Posté le 23 octobre 2018 - 14:10 |
Bonjour,
je remonte cette question car on m'a fait un ping dessus.
C'est une question assez compliquée à répondre car on rentre dans le cadre de l'API Windows. Malheureusement, je n'ai pas trouvé de solution immédiate à ce problème et je ne réponds pas à la question.
J'ai quand même quelques pistes sous la forme de liens :
https://www.developpez.net/forums/d1007779/environnements-developpement/windev/recuperer-texte-surligne-n-importe-fenetre-windows/
Ce premier lien vers un autre forum permet à un utilisateur de récupérer le contenu du champ en cours de saisie. Pour cela, on détermine le hwnd de la fenêtre ayant le focus via la fonction SysFenActive (http://doc.pcsoft.fr/?3073005).
On envoie ensuite la combinaison de touche Ctrl + A puis Ctrl + C pour récupérer le contenu. On peut ensuite récupérer le copier coller via la fonction PressePapier(https://doc.pcsoft.fr/fr-FR/?3063004&name=PressePapier), traiter le contenu, le remettre dans le presse papier avec la fonction VersPressePapier (https://doc.pcsoft.fr/fr-FR/?3063005) et envoyer la combinaison de touche Ctrl + V
Un petit exemple, je remplace le mot "chaine" par "texte" :
POUR i = 1 _A_ 2 Multitâche(-100) Trace(i) FIN
hwnd_focus est un entier système = SysFenActive() EnvoieTouche("^a", hwnd_focus) Multitâche(-1) EnvoieTouche("^c", hwnd_focus) Multitâche(-1)
chaine_copiée est une chaîne = PressePapier() chaine_collée est une chaîne = Remplace(chaine_copiée,"chaine", "texte")
VersPressePapier(chaine_collée)
EnvoieTouche("^v", hwnd_focus)
----------------
Une deuxième piste que j'ai trouvé, mais je n'ai pas réussi à aller jusqu'au bout, c'est le lien suivant qui passe par les API Windows :
https://www.codeproject.com/Articles/34752/Control-in-Focus-in-Other-Processes
Il explique comment récupérer le handle du champ qui a le focus.
Dans un premier temps, on récupère le handle de la fenêtre en cours (SysFenActive()), à partir de là, on récupère le pid de la fenêtre (GetWindowThreadProcessId). On essaye ensuite d'utiliser la fonction GetFocus qui ne marche que sur l'application courante. On essaye donc d'attacher l'id du thread qui a le focus à celui du thread qui fait le traitement (votre application) (fonction AttachThreadInput à exécuter deux fois avec Vrai pour attacher et Faux pour détacher). Malheureusement, je n'ai pas réussi cette étape là.
----------------
La troisième piste, votre demande ressemble beaucoup aux usages que l'on fait de l'outil Auto Hotkey, peut-être est-ce une piste à creuser ? Le lien vers l'application est : https://autohotkey.com/
----------------
Enfin, dernier détail, si vous utilisez une touche de raccourci pour activer la fonctionnalité de remplacement, pourquoi chercher à savoir si le champ est éditable ? Un utilisateur averti saura s'en servir au bon moment. En revanche, si c'est pour des utilisateurs débutants, je comprend que cela est risqué.
----------------
Désolé de ne pas avoir pu vous donner une piste qui mène vers une solution finale.
Bonne journée à vous !
-- Johjo aka Jonathan Laurent
Codez mieux ! Codez plus vite !
Mon blog sur WinDev : http://www.ytreza.org Me contacter sur slack (wx-community) : https://frama.link/BoBD0SY0 Faîtes moi un ping : http://www.ytreza.org/fr/services/ping-sur-forum |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 127 messages |
|
| Posté le 23 octobre 2018 - 16:32 |
Bonjour et merci pour cette réponse détaillée.
1) Je souhaiterais m'en tenir aux API et 'handles' de Windows (pas emballé par les < EnvoieTouche > et autres <PressePapier > de Windev) ; j'ai effectivement déjà essayé de creuser dans ce sens (APIs) avec au final peu de réponses et passablement « mal au cheveux », façon lendemain de réveillon ... Je vais étudier votre piste.
2) Pourquoi chercher à savoir si le champ est éditable ? : Une fausse manip. pourrait placer une chaine choisie (suite à sélection dans une liste 'dictionnaire') dans le buffer clavier, qui serait ensuite « injectée » ... n'importe où (de préférence où il ne faut pas !) ; alors qu'une écriture 'immédiate' (dans un contrôle 'de la classe Edit') est une façon de suivre en temps réel le processus et ses éventuelles dérives (quitte à ce qu'une alerte m'indique que je ne suis pas dans une zone éditable, tout en neutralisant ce tampon de clavier) ...
NB : toujours pas programmeur mais 'hobbyist' (profession libérale) ; d'où certains blancs ...
Merci encore et bonne suite,
Mike |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 127 messages |
|
| Posté le 23 octobre 2018 - 17:52 |
Addendum :
Il faudrait donc savoir (par le biais de son handle ?) si le contrôle (/champ) survolé (/sélectionné) est 'éditable' ...
... et donc trouver quelqu'un qui maîtrise les API Windows ...
Vous remerciant,
Mike |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|