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

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

Фокус на свое приложение


Igoryano ©   (2004-09-07 12:14:00) 

Задача такая: Есть приложение, необходимо чтобы его форма была всегда в фокусе. На форме есть таймер на событие его изменение я и хочу поставить проверку что сейчас активно. Грубо говоря чтоб пользователь даже на рабочий стол не мог переключиться. Get/SetActiveWindow не помогает, т.к. действует в пределах своего приложения.


DVM   (2004-09-08 13:58:00) [1]


> Как перехватить сообщение о потере фокуса?

WM_ACTIVATE, WM_FOCUS помогут отследить потерю фокуса.

> и собственно как вернуть собственно фокус?

[1] + SetFocus


Igoryano   (2004-09-08 13:24:00) [2]

Как перехватить сообщение о потере фокуса? и собственно как вернуть собственно фокус?


DVM   (2004-09-08 11:56:00) [3]


> Не работает видимо тоже распространяется только на свое
> приложение.

Дело не в этом. В Microsoft решили, что это плохо, когда неизвестно какое приложение вдруг выскакивает из ниоткуда и забирает клавиатурный фокус себе. Поэтому в Win2000 и выше поведение некоторых функций изменили. В частности SetForegroundWindow (). Хотя MS вовсю злоупотребляет захватом фокуса в своих программах.
Проще всего это использовать то, что я уже написал в 1.
Есть другой способ, но он сложнее.


Igoryano   (2004-09-08 10:53:00) [4]

Не работает видимо тоже распространяется только на свое приложение.


DeadMeat   (2004-09-07 18:05:00) [5]

SetForegroundWindow ()...

---
...Death Is Only The Begining...


Igoryano   (2004-09-07 13:47:00) [6]

У меня XP. Свободно переключаю на любое другое приложение.


Igoryano   (2004-09-07 13:45:00) [7]

Так не работает


Multy   (2004-09-07 13:45:00) [8]

По XP вроде работает, а как сделать чтобы работало всегда?


DVM   (2004-09-07 13:37:00) [9]


> Multy   (07.09.04 13:32) [3]

Под Win2000 и выше не будет работать в 100% случаях.


Multy   (2004-09-07 13:32:00) [10]

Можно например так:
Var H: HWND;
 H := FindWindow(nil, 'My Progect');
 BringWindowToTop(H);

Причём из любого приложения


Igoryano   (2004-09-07 13:09:00) [11]

таймер нужен для реализации функцианалы этой проги, на что вешать мне пох. Напишите код как перехватить сообщение и как установить обратно фокус на мое приложение (мало опыта с winAPI)


DVM   (2004-09-07 12:55:00) [12]

SwitchToThisWindow()

> Есть приложение, необходимо чтобы его форма была всегда
> в фокусе. На форме есть таймер на событие его изменение
> я и хочу поставить проверку что сейчас активно.

На кой тут таймер, окну и так приходят соответствующие сообщения при получении/потере фокуса.


Наверх

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