Handle, Control ID, etc... Est-ce que quelqu'un peut être clair?

Résolu
midiennemi Messages postés 4 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 1 octobre 2008 - 1 oct. 2008 à 16:15
midiennemi Messages postés 4 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 1 octobre 2008 - 1 oct. 2008 à 18:46
Bonjour,
Depuis quelques jours, je recherche la solution à mon problème.
Vous allez donc me dire "Mais quel est-il ce problème?" donc je vous répondrais tout simplement:
Une application contient une zone de texte (à savoir que je n'ai ni le source de cette application (ce serait trop facile) ni même un petit SDK, rien, que dalle!!) dans une fenêtre. Je voudrais pouvoir envoyer du texte à partir de mon application vb.net vers cette application. Donc pour résumer graphiquement:

monApplication.vbNet {Zone de texte} => {boutonEnvoiTexte} =========> zoneTexteApplicationTiers.exe

Voila si c'est pas clair en gros mon application contient une zone de texte (ou pas... mais pour l'exemple elle en contiendra une :) ), en cliquant sur le bouton elle envoie du texte vers la zone de texte de l'application tiers (pour rappeler le contexte, ni SDK, ni source, rien).

Vous allez donc me répondre: "Eh ben! T'es nul ou quoi, t'as qu'a utiliser le handle de l'application et un SendMessage, pfff sont cons les gens qui ne savent pas utiliser l'API win32" et je répondrais tout simplement : "Eh ben! Tu crois pas que j'ai déjà essayé, regarde dans le premier post et tu verras que j'ai anticipé ta question" (je m'adresse effectivement aux gens capables de comprendre le mot anticipation :p ).

Bref, Lorsque je fais une petite recherche, je me retrouve avec un Handle (qui change évidemment à chaque fois que l'application est redémarrée), un ControlID (qui ne change pas), un ID de fonction (qui ne change pas) et un nom de type ATL:00890809 (attention ce nom est fictif mais c'était juste pour montrer comment il était organisé: "ATL:" + une suite de 8chiffres).

Pourriez-vous, s'il vous plaît, m'expliquer comment procéder?
Ais-je bien tous les éléments en main?
Comment construire ma fonction sendMessage() si c'est celle-ci qu'il faut utiliser?
Comment trouver le Handle du controle en sachant que le seul Handle que je puisse trouver grace a FindWindow() c'est celui de la fenêtre qui contient le controle mais pas celui du controle lui-même?

Aidez-moi s'il vous plait, je glisse doucement vers une dépression nerveuse certaine.

Merci d'avance :)

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 oct. 2008 à 18:31
Si tu sais récupérer le HWND de la fenêtre contenant le textbox ET si le ctrlID du textbox ne change pas:
EnumChildWindows sur le HWND parent.
Dans l'enum, GetWindowLong avec GWL_ID sur chaque hChild envoyé par Windows à ta callback, quand ID correspondra à celui espéré, tu auras le handle du textbox.

ciao...
BruNews, MVP VC++
3
midiennemi Messages postés 4 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 1 octobre 2008
1 oct. 2008 à 18:39
Merci beaucoup :)
Aurais-tu le prototype de cette fonction a tout hasard?
Merci beaucoup encore une fois
0
midiennemi Messages postés 4 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 1 octobre 2008
1 oct. 2008 à 18:43
Mmm... je viens de trouver le prototype... cela retourne un booléen????
J'aurais aimé avoir le Hwnd pas un bool... A moins que mon raisonnement soit faussé je ne sais pas...

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function EnumChildWindows(ByVal hWndParent As System.IntPtr, _
   ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Integer) As Boolean
0
midiennemi Messages postés 4 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 1 octobre 2008
1 oct. 2008 à 18:46
OOOOOOOOOOOOOOoooooooooooh Désolé je n'ai pas lu jusqu'à la fin il faut que je crée un listHandle qui va me permettre d'avoir un childList... Okay désolé.
Réponse super-acceptée Merci énormément
0
Rejoignez-nous