![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SetForegroundWindow срабатывает только один раз. [D6, Win2k]
Ascan_ © (2002-12-10 13:36:00)Почему так?
Если я в программе использовал уже функциюSetForegroundWindow, то при втором использовании окно активным не становится, а только его имя внизу помигает(не помню как это "внизу" называется).
Как быть?
Вот пример кода, который не работает:
...
private
ActiveWindow,
MyWindow: hWnd;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
ActiveWindow:= GetForegroundWindow;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
MyWindow:= GetForegroundWindow;
SetForegroundWindow(ActiveWindow);
SetForegroundWindow(MyWindow); // Вот эта строчка не сработает
end;
...
Да, эта строчка не сработает. Мое окно помигает "внизу" и все.
И так не работает:
SetForegroundWindow(ActiveWindow);
sleep(200);
SetForegroundWindow(MyWindow);
И так:
SetForegroundWindow(ActiveWindow);
Application.ProcessMessage;
SetForegroundWindow(MyWindow);
И далее по коду в любом месте эта функция не срабатывает.
Ascan_ (2002-12-10 15:37:00) [1]Игорь Шевченко, ненавижу этот сайт... но придется слазить, спасибо.
Игорь Шевченко (2002-12-10 15:11:00) [2]http://msdn.microsoft.com- SetForegroundwindow, AllowSetForegroundWindow
Ascan_ (2002-12-10 14:18:00) [3]Не нашел, я уже искал и сейчас еще раз.
Сможешь дать ссылку, где об этом можно почитать?
Song (2002-12-10 13:52:00) [4]От w2k у SetForeGroundWindow() такое поведение. Это специально сделано.
Вот представьте сидите Вы в ворде. Чего-то пишите, не смотря на экран, смотрите на клаву, вдруг какой-то **** (я не про Вас) выводит на верх своё окно! И что? А то, что все нажатия пошли на то окно, а не на ваш ворд, поэтому такая феня и была сделана. Поэтому надо перед передачей фокуса приатачить процесс того окна к своему и потом использовать SetForeGroundWindow() или использовать SPI_ANIMATED в ф-ии SystemParametersInfo() и SetForeGroundWindow(). В базе данных готовых решений есть готовый SetForeGroundWindow, который работает так как надо.
Ascan_ (2002-12-10 13:45:00) [5]Да. Именно он.
А права Админа. (это так, на всякий случай)
И все окна развернуты (неминимизированны).
Song (2002-12-10 13:43:00) [6]У Вас наверно w2k?