Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.01 c
11-1188746752
andreil
2007-09-02 19:25
2008.05.04
Глюк Дельфи или КОЛ?


2-1207414548
Alexey
2008-04-05 20:55
2008.05.04
Не получается SQL-запрос


2-1207582041
Artin
2008-04-07 19:27
2008.05.04
Несколько раюочих столов в Windowse. Как в Линуксе.


15-1206251473
Cyrax
2008-03-23 08:51
2008.05.04
"Сотрудник" (учебного заведения) по-английски....


15-1206025363
ms1
2008-03-20 18:02
2008.05.04
SQL Serveur 2000