Envoi d'un clic de souris sur un bouton dans la barre des tâches à l'aide de C#


7

Dans une application sur laquelle je travaille actuellement, il est nécessaire de placer une fenêtre d'application externe au premier plan. Faire des appels API Win32 tels que BringWindowToTop et la fenêtre SetForeground ne fonctionnent pas tout le temps. Cela est dû à certaines restrictions dans Windows XP. Ce que je voudrais faire à la place est de simuler une souris, cliquez sur le bouton de la fenêtre dans la barre des tâches, ce qui, je l'espère, amènera la fenêtre à l'avant. Est-ce que quelqu'un sait comment cela est possible?

5

Consultez la section "Comment se concentrer sur 2K/XP" au http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, car c'est exactement ce dont vous avez besoin. Je ne voudrais pas aller le chemin de la barre des tâches que la barre des tâches pourrait être caché ou simplement pas là.


2

C'est possible. Mais c'est extrêmement sommaire. Votre application peut également rompre avec la prochaine version de Windows, car elle n'est pas documentée. Ce que vous devez faire est de trouver le handle de fenêtre de la barre des tâches, puis de trouver le handle de fenêtre de la fenêtre enfant représentant le bouton, puis de lui envoyer un message WM_MOUSEDOWN (je pense).

est ici un peu à trouver la poignée de la fenêtre de la barre des tâches:

http://www.codeproject.com/

FWIW, les restrictions sur BringWindowToTop/setForeground sont là parce qu'il est agaçant quand une fenêtre se concentrer steals. Cela peut ne pas importer si vous travaillez sur un environnement d'entreprise. Gardez cela à l'esprit. :)


1

Je l'ai utilisé dans un programme où j'avais besoin de simuler des clics et des mouvements de la souris;

Global Mouse and Keyboard Library


1

Pour être honnête, je ne l'ai jamais eu un problème qui porte une fenêtre au premier plan sur XP/Vista/2003/2000.

Vous devez vous assurer que vous effectuez les opérations suivantes:

  1. Vérifiez si IsIconic (réduit)
  2. Si # 1 résultats dans vrai puis appelez ShowWindow passant SW_RESTORE
  3. Ensuite, appelez SetForegroundWindow

Je n'ai jamais eu de problèmes que je peux penser à faire avec ces étapes.