Piloter une autre application (SendMessage)

Messages postés
67
Date d'inscription
dimanche 16 octobre 2005
Statut
Membre
Dernière intervention
13 novembre 2009
- - Dernière réponse : jnmchl
Messages postés
67
Date d'inscription
dimanche 16 octobre 2005
Statut
Membre
Dernière intervention
13 novembre 2009
- 29 mars 2008 à 10:49
Bonjour,


Je cherche à faire une application qui sert d'interface entre une application personnelle et une application professionelle : j'explique l'historique et le boulot :
Je dois traiter des données que j'exploite selon ma stratégie et que je devais jusque là rendre à ma direction sous forme de fichier XLS selon un canevas fourni. Pour gagner du temps, je me suis fais une application sous Delphi pour m'aider dans le traitement de ces données et qui inclue également des fonctions propres à ma stratégie, cette appli générait directement le fichier XLS demandé par ma direction. J'ai ainsi toujours obtenu de bons résultats fiables et rapides.
Aujourd'hui, la direction a changé son logiciel : mon boulot reste le même sauf que la direction ne veut plus de fichiers XLS mais les données doivent être saisies par moi dans une interface reliée au système. J'ai râlé mais ma direction ne veut rien entendre : pour eux ils me demandent le même boulot mais au lieu de saisir sous XLS je dois saisir dans leur interface (au demeurant pas très ergonomique). Sauf que moi, je perds un temps précieux à ressaisir tout ce que me crache mon application et qui se fait au détriment de la quantité et qualité de mon travail.
En fait, je me suis renseigné et j'ai un peu exploré le système : leur interface est juste un masque de saisie et quelques contrôles de cohérence écrit en Visual Basic connecté à une base ORACLE avec Tuxedo. Je m'interdis d'entrer directement dans la base : c'est trop risqué. Mon idée est donc de faire une appli d'interface pour saisir à ma place et transférer mes données dans leur interface VB.


En utilisant GetWindows, GetNextWindows et SendMessage, j'arrive à lire et écrire dans les contrôles via leur handle. Un essai manuel et partiel fonctionne. Reste maintenant à être séquentiel et tout mettre dans le bon ordre, mais là j'ai un problème qui fait l'objet de ma question :


Les handles changent à chaque fois que l'appli est relancée : je ne peux donc pas les mémoriser, et d'essayer d'identifier quel handle correspond tel ou tel autre contrôle à chaque fois est long et fastidieux.
Donc, comment reconnaitre à coup sûr qu'un numéro de handle correspond bel et bien à un contrôle donné ?
Avec GetWindowText je récupère bien le texte pour les boutons, mais sur des onglets différents : il y a des boutons différents qui portent le même caption (Valider, Annuler ...), et en plus il y a beaucoup de TextBox (ThunderRT6TextBox) ... qui eux n'ont pas de texte ?  
Comme je ne suis pas l'auteur de l'interface en VB je ne connais pas la structure de la form, je me demande s'il est possible de récupérer le nom (la propriété Name) que l'auteur à donné à chaque composant pour m'adresser à son handle de manière sûre ? un "GetComponentName" ?
Ou existe-t-il un autre moyen ? les retrouver par leurs coordonnées top, left : avec les onglets ce n'est pas fiable et je ne sais pas comment faire ? ou l'ordre chronologique de création ?   


De plus, j'ai une autre question comment remplir avec SendMessage les cellules d'un tableau MSFlexGridWndClass ?


J'espère avoir été assez clair dans ma requête, bien sûr je n'attends pas forcément la solution entière mais si ceux d'entre vous qui connaissent un peu le sujet peuvent apporter une brique à l'édifice, ou émettre une idée ... merci d'avance. Même si je programme surtout en Delphi des explications sous VB ou C++ sont les bienvenues.

Jean-Michel
Afficher la suite 

2 réponses

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
Salut,

Pourquoi ne pas passer simplement par le plus ancien moyen de communication inter-processus : le clipboard?
Commenter la réponse de Caribensila
Messages postés
67
Date d'inscription
dimanche 16 octobre 2005
Statut
Membre
Dernière intervention
13 novembre 2009
1
0
Merci
Merci,
Ben c'est ce que je fais actuellement pour gagner un peu de temps, mais pour renseigner 37 TextBox, 4 MSFlexGrid (=StringGrid en Delphi) appuyer sur 5 boutons radio et naviguer dans 6 onglets et 4 clics sur des boutons "Valider" ... et j'en oublie sans doute ... les copiers coller restent fastidieux et je fais pas mal d'erreurs ...
Toutefois, j'avais pensé à une espèce d'automate : càd qu'en connaissant les emplacements des différents contrôles simuler la position de la souris, les clics doubles clics et  le clavier ... mais : 
1) ça me paraissait pas très pro et puis faut s'assurer que la fenêtre soit toujours au même endroit
2) ça permet une saisie semi automatique car il y a une Liste de choix (non modifiable) cette liste est renseignée en fonction de plusieurs critères (que je ne maîtrise pas) donc l'idéal est de lire le contenu pour faire le bon choix (avec le handle et sendmessage : je sais faire).
Peut-être ai-je mal compris ta réponse ?  

Jean-Michel
Commenter la réponse de jnmchl