Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переключение между приложениями [D5, Win2k]


sapsi ©   (2004-10-19 16:13:00) 

Добрый день.
Программно переключаю окна чужих приложений.
Все ок, только после некоторого времени работы возникает следующее: окна приложений становятся активными, но не разворачиваются с панели задач, просто мигают.
Как можно это обойти.


Игорь Шевченко   (2004-10-20 15:50:00) [1]


> SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0,
> 0), как вернуть TIMEOUT в стандартное значение?


Сначала SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT


GLFox   (2004-10-20 14:55:00) [2]

Попробуй так
ShowWindow(WindowHandle,SW_RESTORE);
SetForegroundWindow(WindowHandle);


sapsi   (2004-10-20 14:48:00) [3]

И еще, если я делаю следующее:
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, 0), как вернуть TIMEOUT в стандартное значение?


sapsi   (2004-10-20 14:17:00) [4]

Думаю, что должно быть достаточно, но иногда перключение не происходит, закономерность выявить пока не удается.
Иногда проявляется в активизации приложения на панели задач без рестора окна.


Игорь Шевченко   (2004-10-20 13:59:00) [5]

Я бы рекомендовал выполнить функцию SystemParametersInfo, если она не поможет, то думать дальше.

А разве одной функции SetForegroundWindow недостаточно, чтобы активировать окно некоего приложения ?


sapsi   (2004-10-20 13:50:00) [6]

чужие


Игорь Шевченко   (2004-10-20 13:42:00) [7]

sapsi   (20.10.04 13:13) [3]

Такой вопрос - эти приложения переключаемые твои или чужие ?


sapsi   (2004-10-20 13:13:00) [8]

Вот ситуация более подробно:
Есть приложение, которое переключает окна двух других (чужих) приложений, назовем их "приложение 1" и "приложение 2" по нажатию соответствующей кнопки таким образом, что если в "приложении 1" были открыты дочерние окна, то после переключения на "приложение 2" и возврата в "приложение 1" на верх попадала та дочерняя форма, которая была открыта.
Это достигается функцими setforegroundwindow(wnd) и SwitchToThisWindow(Hwnd,true), которые работают, видимо, идентично.
Проблема возникает тогда, когда я пытаюсь переключать приложения 1 и 2 не по щелчку кнопки главного приложения, а по другому событию, например, сетевого сообщения. В это время главное приложение может быть неактивно.
В случае попытки такого переключения (не по кнопке), оно не всегда отрабатывает.
Как это можно преодолеть?
Спасибо.


sapsi   (2004-10-20 09:11:00) [9]

SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, ...)

Спасибо, почитал про нее.
Но если в двух словах, почему возможно ли возникновение такой ошибки после определенного времени работы? Как можно быстро ее устранить?
На окна я переключаюсь такой последовательностью:
bringwindowtotop(Hwnd);
setforegroundwindow(wnd);
activatewindow(hwnd);
SwitchToThisWindow(Hwnd,true);
чтобы дочерние активные окна были наверху

С уважением.


Игорь Шевченко   (2004-10-19 16:36:00) [10]


> окна приложений становятся активными, но не разворачиваются
> с панели задач, просто мигают.
> Как можно это обойти.


SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, ...) ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо