Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.27;
Скачать: CL | DM;

Вниз

Список окон которые на таскбаре.   Найти похожие ветки 

 
DVM ©   (2003-01-29 16:12) [0]

Долгое время я думал, что одна моя функция для определения того должно ли окно появлятся на таскбаре работает правильно, пока не столкнулся с одной программой, для которой таскбар показывает 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;


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

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


 
DVM ©   (2003-01-29 16:45) [2]

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


 
DVM ©   (2003-01-29 16:46) [3]

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


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

DVM © (29.01.03 16:45)

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


 
DVM ©   (2003-01-29 17:02) [5]


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

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

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

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

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



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

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

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


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


 
DVM ©   (2003-01-29 17:24) [7]

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


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

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


 
DVM ©   (2003-01-29 19:33) [9]

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


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

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


 
DVM ©   (2003-01-30 10:27) [11]

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


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


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


Разве ?


 
DVM ©   (2003-01-30 11:57) [13]

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



 
DVM ©   (2003-01-30 11:59) [14]

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


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


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


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


 
DVM ©   (2003-01-30 12:29) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2003.03.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-87888
khalev
2003-03-16 11:14
2003.03.27
StringGrid


3-87865
Jaxtor
2003-03-06 15:20
2003.03.27
Доступ к значению генератора


7-88286
Lex.
2003-02-02 00:45
2003.03.27
Drag&Drop


1-88051
Evgeny
2003-03-14 17:50
2003.03.27
TStringList


1-88073
Кролик
2003-03-16 11:28
2003.03.27
Преобразование типов