Текущий архив: 2008.05.04;
Скачать: CL | DM;
Вниз
Как активизировать окно моего приложения? Найти похожие ветки
← →
_ozzy_ (2008-04-07 14:18) [0]После окончания продолжительного процесса нужно активизировать окно моего приложения, (программно щелкнуть по иконке в трее), на практике окно уже завалено другими окнами...
Сорри, дубль два...
Application.BringtoFront; только помигал в трее
SetActiveWindow(Application.Handle);
ShowWindow (Form1Glav.Handle, SW_SHOW);
Даже не помигали...
← →
Skyle © (2008-04-07 14:25) [1]SetForegroundWindow?
← →
Leonid Troyanovsky © (2008-04-07 15:24) [2]
> _ozzy_ (07.04.08 14:18)
> После окончания продолжительного процесса нужно активизировать
> окно моего приложения,
Не положено.
--
Regards, LVT.
← →
ANB (2008-04-07 15:53) [3]
> SetForegroundWindow?
Уже практически не ботает.
> Не положено.
+1. Впрочем, на XP у меня пляски с бубном в 90% случаев помогали.
← →
ANB (2008-04-07 15:55) [4]Собственно, пляски :
procedure Set_Foreground_Window (hWindow : THandle);
var dwTimeout : DWord;
hMainWindow, hFGW, hMDIClient : THandle;
begin
if (hWindow = 0) then Exit;
// Получим главное окно
hMainWindow := GetMainWindow(hWindow);
// Узнаем какое окно сейчас наверху
hFGW := GetForegroundWindow;
// Если не наше - будем поднимать
if (hMainWindow <> hFGW) then begin
// Отключим моргание вместо подъема окна
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @dwTimeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, 0);
try
// Попробуем разными способами поднять окно
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_HOTKEY, LPARAM(hMainWindow));
SwitchToThisWindow(hMainWindow, True);
SetForegroundWindow(hMainWindow);
// Для MDI окон
if (hWindow <> hMainWindow) then begin
// Найдем MDI Client
hMDIClient := FindWindowEx(hMainWindow, 0, "MDIClient", "");
// Пошлем ему сообщение WM_MDIACTIVATE
SendMessage(hMDIClient, WM_MDIACTIVATE, hWindow, 0);
end;
finally
// Восстановим моргание
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, @dwTimeout, 0);
end;
end;
end;
← →
Палач (2008-04-07 15:55) [5]
> Leonid Troyanovsky © (07.04.08 15:24) [2]
>
> > _ozzy_ (07.04.08 14:18)
>
> > После окончания продолжительного процесса нужно активизировать
>
> > окно моего приложения,
>
> Не положено.
?
← →
ANB (2008-04-07 16:02) [6]
> > Не положено.
>
>
> ?
МС сначала выдала функцию, а затем старательно блокирует ее работу, считая, что принудительный вывод какого то приложения на передний план без желания юзера есть нехорошо. Причем с каждой версией винды они последовательно рубят отработанные способы это сделать.
← →
DVM © (2008-04-07 16:03) [7]А у самой MS тем временем есть еще одна функция SwitchToThisWindow(), которой она пользуется сама.
← →
Kolan © (2008-04-07 16:05) [8]Имхо ненадо этого делать, надо просто помигать кнопочкой в таск баре, как это делают все культурные программы.
← →
ANB (2008-04-07 16:16) [9]
> надо просто помигать кнопочкой в таск баре
Иногда - надо именно передать фокус ввода. Например, при иммитации нажатий на кнопки. А моргание этому не поможет.
← →
Kolan © (2008-04-07 16:31) [10]> Например, при иммитации нажатий на кнопки.
Непонял, нажатий на кнопки чего?
← →
Leonid Troyanovsky © (2008-04-07 18:15) [11]
> ANB (07.04.08 15:55) [4]
> Собственно, пляски :
Если это условно-работоспособное решение, то стоит ли стоять
двоим против ветра - оно ж обречено.
Ну, и если даже мы знаем 100% работоспособный метод, то публикуя его, рано или поздно мы добьемся убиения оного очередным сервиспаком.
--
Regards, LVT.
← →
DVM © (2008-04-07 21:22) [12]
> Ну, и если даже мы знаем 100% работоспособный метод, то
> публикуя его, рано или поздно мы добьемся убиения оного
> очередным сервиспаком.
Как бы там ни было, но панель задач будет все равно пользоваться некой функцией для переключения окон. И она будет всегда. А узнать ее не очень сложно.
← →
Leonid Troyanovsky © (2008-04-08 15:28) [13]
> DVM © (07.04.08 21:22) [12]
> Как бы там ни было, но панель задач будет все равно пользоваться
> некой функцией для переключения окон.
Для панели задач не нужно каких-либо функций кроме имеющихся,
бо, оное переключение не нарушает ограничений даже для SFW,
т.е., и последней вполне достаточно.
--
Regards, LVT.
← →
DVM © (2008-04-08 15:37) [14]
> Для панели задач не нужно каких-либо функций кроме имеющихся,
Тем не менее, ее функция (я о SwitchToThisWindow) прекрасно подходит и для того, чтобы окну приложения выпрыгнуть самому на передний план и перехватить фокус ввода в любой момент. Может в будущем поведение и изменится, но оно не меняется уже 13 лет.
Страницы: 1 вся ветка
Текущий архив: 2008.05.04;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.005 c