Я использую pinvoke «user32.dll», чтобы отправить мое приложение обратно (за всеми другими приложениями), чтобы он сидел на рабочем столе и наоборот. На данный момент он просто переключается - назад/вперед. Есть ли способ определить, находится ли мое приложение сзади и перенести его на передний план, или если оно находится на передней панели и отправлено обратно? Благодарю.Как управлять фокусом приложений Windows в .NET.
ответ
Эти ссылки должны помочь:
How to get the z-order in windows?
http://msdn.microsoft.com/en-us/library/ms632599%28VS.85%29.aspx#zorder
Вы можете обнаружить, если ваше окно является активным окном, вызвав
[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