2008-10-23 8 views
1

Je voudrais envoyer des séquences de touches d'un programme C++ dans une autre fenêtre. Pour cette raison, j'aimerais que l'utilisateur sélectionne la fenêtre cible de la même manière que dans l'utilitaire Spy ++ livré avec Visual Studio (faites glisser un curseur en forme de croix sur la fenêtre cible et faites apparaître la fenêtre cible sur un cadre) .Comment sélectionner et mettre en surbrillance une fenêtre dans une autre application?

Comment est-ce glisser et sélectionner fait dans Windows? Je suis complètement perdu quant à l'endroit où je pourrais commencer à chercher un mécanisme pour implémenter cette fonctionnalité.

Répondre

2

Voilà comment cela se fait habituellement:

  1. capture la souris à l'aide SetCapture. Cela entraînera l'acheminement de tous les messages de la souris vers la fenêtre de votre application.
  2. Gérez le message WM_MOUSEMOVE. Dans votre code de gestionnaire, saisissez la fenêtre sous la souris en utilisant WindowFromPoint. Cela vous obtiendra le HWND de la fenêtre que la souris est actuellement terminée.
  3. Maintenant que vous avez la fenêtre, vous avez besoin d'un contexte de périphérique (HDC). Vous pouvez en obtenir un en utilisant GetWindowDC pour la fenêtre spécifiée.
  4. Vous pouvez maintenant dessiner dans le contrôleur de domaine en utilisant des fonctions GDI typiques.

Il y a certaines choses que vous devez faire attention - effacer proprement le rectangle de sélection et ainsi de suite, mais c'est une façon de le faire.

Vous pouvez également dessiner dans un écran DC pour ce faire, mais dans tous les cas, vous aurez besoin de la poignée de la fenêtre pour obtenir la fenêtre rect.

Si vous utilisez Google autour du code source Spy ++, vous verrez quelques exemples de cette technique.

+0

problème avec cette approche est que DWM (en particulier Aero) ne connaît pas vos images bien dessinées et les efface au hasard. –

0

Les réponses des formateurs sont erronées.

code source Spy ++ a été donné sur G. Groupes d'années (voir principalement Win32 api ng nouvelles: //194.177.96.26/comp.os.ms-windows.programmer.win32)

+1

Je connais le code Spy ++, mais il y a plusieurs façons de le faire. Vous pouvez le faire en dehors du processus, en utilisant la technique décrite ci-dessus, ou vous pouvez le faire en cours de processus, en utilisant des crochets, l'injection de DLL, et le sous-classement. Ce que je crois est ce que Spy ++ fait. Mais ce n'est pas strictement nécessaire pour la peinture. –

Questions connexes