En apportant de la Fenêtre à l'Avant en C# à l'aide de l'API Win32
Je suis en train d'écrire une application qui devrait apporter de la fenêtre d'une application externe à l'avant-plan, et pas nécessairement voler le focus (il y a un paramètre que l'utilisateur peut basculer à voler de ne pas voler le focus).
Quelle est la meilleure façon d'aller à ce sujet à l'aide de l'API win32? J'ai essayé SetForeground (), mais il vole toujours se concentrer et ne pas consistenly travail.
Quelle est la meilleure façon d'aller à ce sujet? Toutes les pensées?
Vous devez vous connecter pour publier un commentaire.
SetForegroundWindow est censé voler le focus et il y a certains cas où il échoue.
Essayer de capturer l'attention avec SetCapture avant de faire l'appel. Aussi se pencher sur les différentes façons de mettre la fenêtre à l'avant: SetForeGroundWindow, SetActiveWindow, même simuler un clic de souris peuvent le faire.
Selon MSDN, SetForeGroundWindow activera la fenêtre et direct clavier focus. Cette tente de fonctionner même lorsque votre processus en arrière-plan. SetActiveWindow fait la même chose que SetForeGroundWindow, mais cela ne sert à rien si votre application n'est pas l'application au premier plan. Enfin, BringWindowToTop qui apporte de la fenêtre vers le haut, et de ne pas changer le focus clavier.
Vous pouvez essayer le BringWindowToTop fonction pour ne pas voler le focus. Je ne l'ai pas utilisé, mais il semble être ce que vous cherchez.
Avez-vous essayé d'utiliser SetWindowPos. C'est la fonction canonique pour le déplacement, le redimensionnement et le réglage de l'axe z dans Windows. Il y a un SWP_NOACTIVATE drapeau que vous pouvez utiliser. Regardez http://msdn.microsoft.com/en-us/library/ms633545(SV.85).aspx. Je n'ai pas essayé sur une fenêtre appartenant à un autre processus, mais il vaut probablement la peine d'essayer.
SetWindowPos + SWP_NOACTIVATE fait le travail.
Vous pouvez utiliser la fonction FindWindow pour obtenir le HWND de la fenêtre, puis utilisez le BringWindowToTop fonction de l'API Win32.