![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Список окон которые на таскбаре. [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, которая, кроме всего прочего, показывает еще и список окон, которые находятся на таскбаре.