Apporter fenêtre à l'avant en C # en utilisant l'API Win32

voix
35

Je vous écris une application qui a besoin d'apporter la fenêtre d'une application externe au premier plan, et vole pas nécessairement mise au point (il y a un paramètre que l'utilisateur peut basculer de voler / pas voler le focus).

Quelle est la meilleure façon d'aller à ce sujet en utilisant l'API win32? J'ai essayé setForeground () mais il vole toujours se concentrer et ne fonctionne pas marmonnait.

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

Créé 06/08/2008 à 01:55
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
14

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

La fonction SetForegroundWindow met le thread qui a créé la fenêtre spécifiée dans l'avant-plan et active la fenêtre. entrée de clavier est dirigée vers la fenêtre

Essayez de capturer la mise au point avec SetCapture avant de faire l'appel. Regardez aussi dans différentes façons d'amener la fenêtre à l'avant: SetForegroundWindow, SetActiveWindow, simulant même un clic de souris peut le faire.

Créé 06/08/2008 à 02:06
source utilisateur

voix
5

Quelle est la différence entre SetForegroundWindow, SetActiveWindow et BringWindowToTop? Il semble que tous font la même chose.

Selon MSDN, SetForegroundWindow active la fenêtre et le focus clavier directement. Cette tente de travailler 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 active. Enfin, BringWindowToTop apporte seulement la fenêtre vers le haut, et ne change pas le focus du clavier.

Créé 06/08/2008 à 14:20
source utilisateur

voix
2

Avez - vous essayé d' utiliser SetWindowPos. Ceci est la fonction canonique pour déplacer, redimensionner et la mise en ordre z dans Windows. Il y a un drapeau SWP_NOACTIVATE vous pouvez utiliser. Regardez http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx . Je ne l' ai pas essayé sur une fenêtre appartenant à un autre processus, mais il est probablement la peine d'essayer.

Créé 24/08/2008 à 22:51
source utilisateur

voix
2

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

Créé 06/08/2008 à 02:37
source utilisateur

voix
1

SetWindowPos + SWP_NOACTIVATE fait le travail.

Créé 18/12/2009 à 08:23
source utilisateur

voix
0

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

Créé 06/05/2011 à 15:44
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more