Question

J'écris une application qui doit mettre la fenêtre d'une application externe au premier plan, et pas nécessairement voler le focus (il existe un paramètre que l'utilisateur peut activer pour voler/ne pas voler le focus).

Quelle est la meilleure façon de procéder en utilisant l'API win32 ?J'ai essayé SetForeground() mais cela vole toujours le focus et ne fonctionne pas toujours.

Quelle est la meilleure manière de s'occuper de ça?Des pensées?

Était-ce utile?

La solution

SetForegroundWindow est censé voler le focus et il existe certains cas où il échouera.

La fonction SetForegroundWindow place le thread qui a créé la fenêtre spécifiée au premier plan et active la fenêtre.La saisie au clavier est dirigée vers la fenêtre

Essayez de capturer la mise au point avec DéfinirCapture avant de passer l'appel.Examinez également différentes manières de mettre la fenêtre devant :SetForeGroundWindow, SetActiveWindow, même la simulation d'un clic de souris peut le faire.

Autres conseils

Quelle est la différence entre SetForeGroundWindow, SetActiveWindow et BringWindowToTop ?Il semble qu'ils fassent tous la même chose.

Selon MSDN, SetForeGroundWindow activera la fenêtre et dirigera le focus clavier vers celle-ci.Cela tente de fonctionner même lorsque votre processus est en arrière-plan.SetActiveWindow fait la même chose que SetForeGroundWindow, mais il ne fait rien si votre application n'est pas l'application la plus visible.Enfin, BringWindowToTop amène uniquement la fenêtre vers le haut et ne modifie pas le focus du clavier.

Vous pouvez essayer la fonction BringWindowToTop pour ne pas voler le focus.Je ne l'ai pas utilisé, mais cela semble être ce que vous recherchez.

Avez-vous essayé d'utiliser SetWindowPos.Il s'agit de la fonction canonique pour déplacer, redimensionner et définir l'ordre z dans Windows.Il existe un indicateur SWP_NOACTIVATE que vous pouvez utiliser.Regarder http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx.Je n'ai pas essayé cela sur une fenêtre appartenant à un autre processus, mais cela vaut probablement la peine d'essayer.

SetWindowPos + SWP_NOACTIVATE fait le travail.

Vous pouvez utiliser FindWindow pour obtenir le HWND de la fenêtre, puis utiliser la fonction BringWindowToTop trouvée dans l'API Win32.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top