Comment afficher une fenêtre de premier plan à l'aide de c#?
Je suis en train d'essayer d'apporter une fenêtre de premier plan. Je suis l'aide de ce code. Mais sa ne fonctionne pas. Quelqu'un pourrait s'il vous plaît aider?
ShowWindowAsync(wnd.hWnd, SW_SHOW);
SetForegroundWindow(wnd.hWnd);
//Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
//Converted to Delphi by Ray Lischner
//Published in The Delphi Magazine 55, page 16
//Converted to C# by Kevin Gale
IntPtr foregroundWindow = GetForegroundWindow();
IntPtr Dummy = IntPtr.Zero;
uint foregroundThreadId = GetWindowThreadProcessId(foregroundWindow, Dummy);
uint thisThreadId = GetWindowThreadProcessId(wnd.hWnd, Dummy);
if (AttachThreadInput(thisThreadId, foregroundThreadId, true))
{
BringWindowToTop(wnd.hWnd); //IE 5.5 related hack
SetForegroundWindow(wnd.hWnd);
AttachThreadInput(thisThreadId, foregroundThreadId, false);
}
if (GetForegroundWindow() != wnd.hWnd)
{
//Code by Daniel P. Stasinski
//Converted to C# by Kevin Gale
IntPtr Timeout = IntPtr.Zero;
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, Timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Dummy, SPIF_SENDCHANGE);
BringWindowToTop(wnd.hWnd); //IE 5.5 related hack
SetForegroundWindow(wnd.hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Timeout, SPIF_SENDCHANGE);
}
Code Expliqué
Faire une fenêtre de la fenêtre de premier plan
exige plus que juste l'appel de la
SetForegroundWindow API. Vous devez
d'abord déterminer le thread de premier plan
et le joindre à votre fenêtre, à l'aide de
AttachThreadInput, puis d'appeler
SetForegroundWindow. De cette façon, ils peuvent
part des entrées.J'ai d'abord appel à GetForegroundWindow
obtenir le handle de l'actuel
fenêtre de premier plan. Puis, quelques appels à
GetWindowThreadProcessId récupérer le
les threads associés avec le courant
de premier plan de la fenêtre et de la fenêtre, je
voulez apporter à l'avant-plan. Si
ces fils sont même un simple
appel à SetForegroundWindow est tout
ce qui est nécessaire. Sinon, l'
thread de premier plan est joint à l'
fenêtre que je porte à l'avant
et détaché de ce qui était l'actuel
fenêtre de premier plan. L'
AttachThreadInput API gère cela.
Du contenu provenant de ici
Merci.
- Le mal de code, le vote pour la fermer.
- Je ne peux pas comprendre le code de trop. Mais je pense topic ne sera pas fermé. Im attente de solutions possibles
- mayb il suffit de garder le titre et l'enlever (oublier) du code?
- vous devez utiliser un NotifyIcon au lieu
- Ce code est en effet mal, et potentiellement buggy ainsi: blogs.msdn.com/b/oldnewthing/archive/2008/08/01/8795860.aspx
- Double Possible de Quelle est la "bonne" façon d'apporter une Application Windows Forms à l'avant-plan?
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé cette méthode avant:
Plus d'informations: http://pinvoke.net/default.aspx/user32.SetForegroundWindow
Ce code restaure et définir le focus à une fenêtre:
Et de l'utiliser comme ceci:
Pour SetForegroundWindow de travailler de manière cohérente, vous devez répondre à quelques critères. Le premier est le processus utilisé pour exécuter la commande doit être au premier plan. Seuls les processus d'arrière-plan peut faire d'un autre processus de premier plan. Afin de rendre votre processus de premier plan, tout d'abord, vous devez vous munir de la fenêtre principale à l'avant, si elle ne l'est pas. Vous de le réduire en premier et ensuite SetForegroundWindow, de la rendre de premier plan. Maintenant, trouver le processus cible et l'amener à l'avant
Les étapes sont
J'ai un exemple, si c'est un peu différents cas d'utilisation.
Vous devez utiliser SetForegroundWindow. Aussi, il peut être intéressant pour vous C# Force La Forme De Focus
Je vais être bref: Forme.BringToFront()
Comme de Windows 7 ces caractéristiques ne se comportent très bien. Si il existe un logiciel comme Excel en face de l'application que vous souhaitez apporter à l'avant puis Windows 7 blocs de cette et fait clignoter la fenêtre. Vous pouvez définir un registre paramètre de délai d'expiration ForegroundLockTimeout=0 HKEY_CURRENT_USER\Control Panel\Desktop mais ce qui est connu comme voler de l'accent. Pour définir le comportement de comment XP "devrait" se comporter et de se comporter dans Windows 7 par défaut, vous pouvez créer et/ou définir la valeur de 0x00030D40 (200000ms).
Je voudrais savoir quelle est la meilleure solution pour les applications Windows. par exemple. Si j'ai confiance en application B pour prendre le focus lorsque je double-clique sur quelque chose dans Une Application, et une autre application est de cacher la fenêtre de l'Application B.