2010-01-19 1 views
0

Я использую pinvoke «user32.dll», чтобы отправить мое приложение обратно (за всеми другими приложениями), чтобы он сидел на рабочем столе и наоборот. На данный момент он просто переключается - назад/вперед. Есть ли способ определить, находится ли мое приложение сзади и перенести его на передний план, или если оно находится на передней панели и отправлено обратно? Благодарю.Как управлять фокусом приложений Windows в .NET.

ответ

2

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

[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

 Смежные вопросы

  • Нет связанных вопросов^_^