Определить активность приложения (фокус на приложения) | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
При наступлении некоторого события, надо вывести приложение на 1й план.
все давно известно
Но если убрать строку _Screen.Windowstate= 1 То приложение в трее мигает, но на 1й план не выходит. А если строку оставить, то недоумения у юзера, по случаю моргания приложения))) Если он работает в нем. Не могу найти апи, для проверки что фокус находится у меня. ------------------ |
Re: Определить активность приложения (фокус на приложения) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В поиске полно обсуждений SetForegroundWindow
Всё зависит от того кто именно и кого пытается вывести вперёд. Активный процесс своё собственное окно - это одно. Фоновый процесс, да ещё и если чужое окно (от другой программы) - совсем другое дело. Плюс период "блокировки" SPI_GETFOREGROUNDLOCKTIMEOUT... WScript.Shell никаких "чудес" отличных от SetForegroundWindow не делает... Ты сам, похоже, переводишь свой процесс в фон, потому он и не может "подняться наверх" и помешать текущему активному процессу. ------------------ WBR, Igor |
Re: Определить активность приложения (фокус на приложения) | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Не совсем понял, что такое
Само приложение этого не делает. Юзер поработал с ним, и перешел работать с другим. Но приложение работает. И получает по таймеру данные, и в случае необходимости, его надо вывести вперед, активным, в фокусе. Оно может быть свернуто, может просто прикрыто. SetForegroundWindow(lnhwnd) ни каких действий не оказывает, увы( вин 10 есть 64, есть 32 Железно работает приведенная конструкция. Но из-за _Screen.Windowstate= 1... В общем все выше описал) Это тоже не помогает
------------------ Исправлено 1 раз(а). Последнее : Аспид, 29.06.18 16:27 |
Re: Определить активность приложения (фокус на приложения) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Оно и не должно оказывать никаких действий. Винда, начиная с какой-то версии защищает пользователя от программ с похабными привычками всплывать наверх посередине процесса работы пользователя, красть фокус ввода и тем самым мешать его работе - именно поэтому когда приложение "в фоне", оно не всплывает, а моргает кнопкой на таскбаре (если его пытаются "поднять" этой самой SetForegroundWindow). При этом если пользователь "отошёл", и некоторое время не проявлял никакой активности, то система уже позволяет другой программе "всплыть" из фона на первый план.
Просто воспользуйся поиском - проблема подробно обсуждалась, в т.ч. и пути её решения приводились. Помнится с покойным Михаилом Дроздовым большущая дискуссия была по этому поводу... ------------------ WBR, Igor |
Re: Определить активность приложения (фокус на приложения) | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Да искал, что то безрезультатно.
Все старое, и на вин 10 не то. Потому и думаю, найти функцию, которая покажет где фокус, и если он у меня, то ничего не делаю, а коли нет, то выше способ все работает. ------------------ Исправлено 1 раз(а). Последнее : Аспид, 29.06.18 18:51 |
Re: Определить активность приложения (фокус на приложения) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
GetForegroundWindow получает текущее активное окно, потом GetWindowThreadProcessId получает id процесса во 2 (out, т.е. передаваемом по ссылке) параметре - можно сравнить с _VFP.ProcessId
Если известно какое именно окно должно быть активным в рамках твоего процесса, можно сразу сравнить хендл GetForegroundWindow с его хендлом (например прога на основе _SCREEN - можно сравнивать с _VFP.HWnd - это "верхнее" окно фоксового процесса). ------------------ WBR, Igor |
Re: Определить активность приложения (фокус на приложения) | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Огромное человеческое спасибо!)
GetForegroundWindow + _VFP.HWnd полностью спасло. Удивляюсь, как ты быстро такое находишь!) Я вчера пол дня потратил... и фига) ------------------ |
© 2000-2024 Fox Club  |