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

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

Список окон которые на таскбаре. [D6, WinXP]


DVM ©   (2003-01-29 16:12:00) 

Долгое время я думал, что одна моя функция для определения того должно ли окно появлятся на таскбаре работает правильно, пока не столкнулся с одной программой, для которой таскбар показывает 1 окно, а моя функция - 2.
Что не так в моем коде:

Function IsAppWindow(wnd:hWnd):boolean;
var WinStyle, ExStyle : LongInt;
begin
result:=true;
WinStyle := GetWindowLong(Wnd, GWL_STYLE);
ExStyle := GetWindowLong(Wnd, GWL_EXSTYLE);
if ((WinStyle AND WS_VISIBLE) = 0) or
(GetWindow(Wnd, GW_OWNER)<>0) or
((ExStyle and WS_EX_TOOLWINDOW)<>0) then result:=false;
if (ExStyle and WS_EX_APPWINDOW)<>0 then result:=true;
end;


DVM   (2003-01-30 12:29:00) [1]

Но кнопки для окон всех остальных программ он перерисует.
Отсюда вывод: окно после запуска изменило стиль.


Игорь Шевченко   (2003-01-30 12:24:00) [2]


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


Разумеется. Taskbar (Shell32.dll) ловит события создания и удаления окон, через банальные (или не очень банальные) хуки (WH_SHELL), поэтому он против таких извращений бессилен.


DVM   (2003-01-30 11:59:00) [3]

Мне еще покоя не дает вопрос: как отследить появление окна консольного приложения. Ну никак не получается.


DVM   (2003-01-30 11:57:00) [4]

Таскбар, по-моему, регагирует только на создание/удаление Top-level окон и на изменение иконки или текста в заголовке окна. Выяснено многочисленными экспериментами.
К тому же если ту прогу запустить и не закрывать, а временно прибить эксплорер, а потом запустить, то на таскбаре кнопки той проги уже не будет, хотя ее окно по-прежнему на экране.


Игорь Шевченко   (2003-01-30 11:40:00) [5]


> При этом кнопка на таскбаре остается, т.к. таскбар на это
> не реагирует


Разве ?


DVM   (2003-01-30 10:27:00) [6]

У меня сейчас нет их собой. Мне кажется я понял в чем дело. Эта прога зачем-то при запуске через примерно пару секунд меняет стиль своего окна. При этом кнопка на таскбаре остается, т.к. таскбар на это не реагирует. Потом, когда я пытаюсь обновить список окон в Вашей программе, ей достаются уже измененные параметры. Вот и все. А моя прога изначально ловит появление окна через хук, поэтому окно ловится нормально.
Осталось выяснить почему моя прога показывает два окна вместо одного.


Игорь Шевченко   (2003-01-30 09:35:00) [7]

А не проще ли показать набор битиков здесь для Style и Exstyle ?


DVM   (2003-01-29 19:33:00) [8]

Да, но какой набор битиков?
Я тут пробовал запустить ту прогу без телефона - идет вроде.
Да, ваша программа из кладовки вообще не видит эту софтину.
Все "битики" окна этой софтины мне известны.
Поэкспериментирую.


Игорь Шевченко   (2003-01-29 17:59:00) [9]

А искать очень просто: GetWindowLong(hWnd, GWL_STYLE), GetWindowLong(hWnd, GWL_EXSTYLE) - Shell именно по набору битиков там определяет.


DVM   (2003-01-29 17:24:00) [10]

Ладно будем искать...
Спасибо.


Игорь Шевченко   (2003-01-29 17:20:00) [11]

Телефона Сименс у меня нету.

> ваша программа в кладовке еще не все иконки из окон умеет
> вытаскивать.


Вот же! А она для этого и не предназначена :tongue:


DVM   (2003-01-29 17:02:00) [12]


> А найти причину самому трудно ?

я не нашел...:(

Вот здесь программа, только она не заработает без подключенного к ком-порту телефона Siemens.
http://sl45.pp.ru/modules.php?op=modload&name=Downloads&file=index&req=getit&lid=19
Вобщем таксбар показывает одно окно - главное окно программы. А моя функция отбирает из всех окон еще одно, которое является about -ом от той программы.

Других подобных программне попадалось.

>Игорь Шевченко - ваша программа в кладовке еще не все иконки из окон умеет вытаскивать.


Игорь Шевченко   (2003-01-29 16:48:00) [13]

DVM © (29.01.03 16:45)

А найти причину самому трудно ?
Тогда эта...программу в студию.


DVM   (2003-01-29 16:46:00) [14]

Наш код не сильно отличается.


DVM   (2003-01-29 16:45:00) [15]

Ха. Ваша программа тоже неправильно отображает. Думаете я не посмотрел.


Игорь Шевченко   (2003-01-29 16:44:00) [16]

В кладовке, в разделе "готовые программы" лежит программа EnumFunctions, которая, кроме всего прочего, показывает еще и список окон, которые находятся на таскбаре.


Наверх

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