2010-07-26 14 views
1

Comment récupérer le handle du contrôle en cours de mise au point? J'utilise WH_KEYBOARD_LL pour capturer toutes les touches, et je devrais être capable de déterminer dans quelle zone de texte l'utilisateur saisit. Le code capturant les événements n'a aucun accès direct aux contrôles dans l'autre application.Obtention du handle du contrôle actuellement ciblé dans une autre application

Je sais que la fonction win32 GetFocus() existe pour obtenir le handle de fenêtre en cours, mais j'ai besoin de quelque chose de similaire pour le contrôle en cours.

Toutes les idées seraient appréciées.

Pika

+0

Je dois ajouter que lors de l'exécution complète de .NET, la fonction GetFocus retourne un Hwnd unique pour chaque contrôle que je sais. Cependant, lorsque vous tapez une application Visual Foxpro (qui héberge cette DLL administrée via COM), le Hwnd est seulement unique par fenêtre. –

Répondre

2

Vous pouvez passer le fil GUI ID à GetGUIThreadInfo() qui vous fournira un GUITHREADINFO.hwndFocus.

+0

Merci pour la suggestion, mais le problème reste le même qu'avec GetFocus(). Il semble que je ne peux pas obtenir les poignées des contrôles à l'intérieur de Visual Foxpro. Tout ce que je peux obtenir, ce sont les fenêtres et les fenêtres enfants à l'intérieur de l'application. –

+0

Avez-vous espionner ++ 'd it? peut-être que les contrôles ne sont pas des fenêtres mais sont dessinés à la place (comme MS Forms) –

+0

Je viens de le faire, mais la profondeur est également limitée aux fenêtres, barres d'outils, arborescences, imagelists, pas plus profondes que dans une application .NET Forms. J'ai trouvé le post suivant (http://www.mofeel.net/110-microsoft-public-fox-programmer-exchange/10593.aspx): FoxPro n'utilise pas GDI pour dessiner ses contrôles, mais il les peint comme des bitmaps. On dirait que c'est impossible ce que j'aimerais faire. –

0

Vous pouvez utiliser WH_MSGFILTER plus général (il est appelé dans le contexte du thread surveillé, vous devez donc créer une DLL). Le callback reçoit la structure MSG contenant toutes les informations sur le message (handle aussi).

+0

J'ai jeté un oeil à l'API, le callback retourne aussi un Hwnd, mais dans le cas de Foxpro, il n'y en a pas. J'aurai le même problème. Merci quand même (je ne connaissais pas ce crochet) –