2010-01-19 4 views
0

J'utilise pinvoke "user32.dll" pour renvoyer mon application à l'arrière (derrière toutes les autres applications) donc il se trouve sur le bureau et vice versa. Pour le moment, il suffit de basculer - arrière/avant. Y a-t-il un moyen de détecter si mon application est à l'arrière et de l'amener au premier plan ou si elle est à l'avant et l'envoyer à l'arrière? Merci.Comment contrôler le focus de l'application Windows dans .NET

Répondre

2

Vous pouvez savoir si votre fenêtre est la fenêtre active en appelant

[DllImport("user32.dll")] static 
static extern IntPtr GetForegroundWindow(); 

Vous étiez en mesure d'appeler

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SetForegroundWindow(IntPtr hWnd); 

pour mettre votre fenêtre au premier plan, mais Microsoft a changé sa fonctionnalité dans Windows ME/2000 (Peut-être que c'était XP?).

Il existe plusieurs tentatives de contourner ce problème, vous devrez peut-être en tester quelques-unes pour voir ce qui fonctionne pour vous.

http://www.tek-tips.com/faqs.cfm?fid=4262

http://markribau.org/blog/?p=7

Je me souviens avoir lu une entrée de registre qui peut être réglé pour permettre SetForegroundWindow de travailler comme on le souhaite, mais il est un système cadre large.

http://www.delphipages.com/forum/showthread.php?t=198261

Vous pouvez utiliser SetWindowPos pour vous placer fenêtre derrière d'autres fenêtres ou de façon permanente sur le dessus si cela aide

http://www.pinvoke.net/default.aspx/user32.SetWindowPos

http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx

Questions connexes