J'ai essayé pleins de méthodes (p'tet pas comme il faut?) et vois pas trop la solution. Si quelqu'un pouvait me mettre sur la bonne piste, je me posternerai (lol !!!). Mein problem:
je dois piloter une application dont j'ai pas le code (faite avec Vantive), pour envoyer du texte dans ses diverses fenetres/zones d'édition,.... (importation de données d'excel vers Vantive/PeopleSoft). Mais l'appli est tres recalcitrante :
>> Comme d'hab, j'essaie d'abord de chopper le dlgItemId des zones d'édition : Pas de chance ! les controles sont chargés en DYNAMIQUE dans TOUT le logiciel et je peux apparement(?) pas prévoir quel sera le prochain dlgItemId pour un controle précis (augmente sans arret). A 1ere vue, ce sera TRES difficile d'envoyer du texte directement dans les zones d'édition via WM_SETTEXT...
>> Subclass, hook et Cie ? je peux en tout cas pas envisager de TOUT faire avec ca, car il est hors de question que mon utilitaire fasse planter le soft du client. Donc j'ai pas trop exploré....
>> Donc je me rabat sur la bonne vieille méthode "séquentielle" avec : des sendkeys, keyb_event et Cie + sleep + séries de vbkeyTab pour passer au controle suivant. Ca marche pas mal jusqu'au moment où je tombe sur des gros pbs de temporisation du à la lenteur du soft que je dois piloter, l'encombrement du réseau, etc...
Ceukispass: Parfois j'envoie des données pour le controle 2 alors qu'on est encore sur le controle 1 (latence dans le passage au controle suivant)
==============> Donc ma dernière solution de facilité <===============
pouvoir connaitre le controle ayant le focus à l'intérieur du logiciel à piloter => pour envoyer le texte suivant que si c'est bien le bon qui a le focus.
Et j'y arrive pô (d'ailleurs est-ce possible)
>> GetFocus, GetCaretPos marchent pas pour une fenetre étrangère, mais seulement pour ses fenetres à soi (apparement rattaché au process en cours) (?)
>> GetForegroundWindow donne la fenetre active, et non le controle actif à l'intérieur de cette fenetre. (?)
y a pas un seul exemple sur internet sur ce pb ! à croire que c'est impossible : pourtant cette problématique parait assez classique !...
Je sé pu koi fair... DONC, si je resume mon pb Actuel :
Faut que je puisse connaitre le controle actif de n'importe quelle application (que ce soit mon application ou une application externe).
Quelqu'un aurait-il une astuce ??
Merci d'avance...
____________________________________________________________
NB1:
Je suis obligé de programmer sous VBA (insta des PC verrouillée) mais peut faire executer des progs en VB/VC++ que je compile chez moi avant.
NB2: Ce que j'ai pas encore bien exploré:
- hook/subclass et capter un message du genre WM_SETFOCUS si c'est bien ce message qui passe (mais ca parait complexe à détecter avec des fenetres MDI)
- moyen quelconque de faire executer un getfocus PAR l'application que je veux espionner ?
Partager