Форум: "WinAPI";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
ВнизСписок окон которые на таскбаре. Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c