Как управлять фокусировкой Windows-приложений в .NET - PullRequest
0 голосов
/ 19 января 2010

Я использую pinvoke "user32.dll", чтобы отправить свое приложение назад (позади всех других приложений), чтобы оно находилось на рабочем столе и наоборот.На данный момент он просто переключается - назад / вперед.Есть ли способ определить, находится ли мое приложение сзади и перенести его на передний план или если оно находится спереди, и отправить его назад?БЛАГОДАРЯ.

Ответы [ 2 ]

2 голосов
/ 19 января 2010

Вы можете определить, является ли ваше окно активным, вызвав

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

Раньше вы могли звонить

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

, чтобы установить окно на передний план, но Microsoft изменила его функциональность в Windows ME / 2000 (возможно, это была XP?).

Существуют различные попытки обойти эту проблему, возможно, вам придется протестировать несколько, чтобы увидеть, что работает для вас.

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

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

Я помню, как читал о записи в реестре, которая может быть настроена так, чтобы SetForegroundWindow могла работать как нужно, но это настройка всей системы.

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

Вы можете использовать SetWindowPos , чтобы поместить ваше окно за другими окнами или надолго, если это поможет

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

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

0 голосов
/ 19 января 2010
...