ALT-TAB + XP
От: Аноним  
Дата: 23.04.05 19:44
Оценка:
проблема такая: нужно убрать иконку моей программы из списка ALT-TAB, перерыл весь интернет (включая этот сайт), большая часть найденого работает только под Win 9x. SetWindowLong(Form1.Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW) — тоже не хочет работать, хотя в MSDN указано, что должно, может проблема в Делфи? Что посоветуете сделать?
Re: ALT-TAB + XP
От: Andrew S Россия http://alchemy-lab.com
Дата: 23.04.05 22:31
Оценка:
А>проблема такая: нужно убрать иконку моей программы из списка ALT-TAB, перерыл весь интернет (включая этот сайт), большая часть найденого работает только под Win 9x. SetWindowLong(Form1.Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW) — тоже не хочет работать, хотя в MSDN указано, что должно, может проблема в Делфи? Что посоветуете сделать?

Проблема действительно в Дельфи. Попробуйте Application.Handle.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: ALT-TAB + XP
От: Аноним  
Дата: 24.04.05 07:05
Оценка:
Здравствуйте, Andrew S, Вы писали:

А>>проблема такая: нужно убрать иконку моей программы из списка ALT-TAB, перерыл весь интернет (включая этот сайт), большая часть найденого работает только под Win 9x. SetWindowLong(Form1.Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW) — тоже не хочет работать, хотя в MSDN указано, что должно, может проблема в Делфи? Что посоветуете сделать?


AS>Проблема действительно в Дельфи. Попробуйте Application.Handle.


Здравствуйте,

ExtendedStyle:=GetWindowLong(Application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
ExtendedStyle or WS_EX_TOOLWINDOW);
Результат тот же, нулевой всмысле. Может есть способ обойти это как-нибудь? Если зарегистрировать процесс как сервис? в NT это даст что-нибудь?
Re: ALT-TAB + XP
От: Кодт Россия  
Дата: 24.04.05 10:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>проблема такая: нужно убрать иконку моей программы из списка ALT-TAB, перерыл весь интернет (включая этот сайт), большая часть найденого работает только под Win 9x. SetWindowLong(Form1.Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW) — тоже не хочет работать, хотя в MSDN указано, что должно, может проблема в Делфи? Что посоветуете сделать?


Может быть, спасёт такой фокус-покус:
— завести фальшивое главное окно,
— сделать его невидимым,
— всем остальным окнам программы указывать, что это фальшивое — их owner.
Перекуём баги на фичи!
Re[2]: ALT-TAB + XP
От: Andrew S Россия http://alchemy-lab.com
Дата: 24.04.05 15:38
Оценка:
А>>проблема такая: нужно убрать иконку моей программы из списка ALT-TAB, перерыл весь интернет (включая этот сайт), большая часть найденого работает только под Win 9x. SetWindowLong(Form1.Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW) — тоже не хочет работать, хотя в MSDN указано, что должно, может проблема в Делфи? Что посоветуете сделать?

К>Может быть, спасёт такой фокус-покус:

К>- завести фальшивое главное окно,
К>- сделать его невидимым,
К>- всем остальным окнам программы указывать, что это фальшивое — их owner.
К>

Application.Handle и есть такое фальшивое окно.

Повторюсь.

Form.Show:
  SetWindowLong(Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW);

Application:
 ....
  Application.Initialize;
  SetWindowLong(Application.Handle, GWL_EXSTYLE,WS_EX_TOOLWINDOW);


Сий код
1. Убирает главное окно из списка по AltTab (там, в отличие от таскбара и таск манагера, приложения выводятся несколько другим способом. Как я понял, сначала просматриваются все окна top level. Но алгоритм определения топ окна отличается — для видимых окон определяется активное попап окно, для чего, предположительно, вызывается GetLastActivePopup. Если результат работы этой функции равен окну, относительно которого она вызывается, то это окно и считается собственно окном приложения и отображается в списке). Т.о., видимость owner окна тут никак не влияет на результат.
2. Убирает кнопку из таскбара и из списка таскманагера (каким образом туда попадают окна — см. соотв. статью).

Т.о., не попасть в список по AltTab становится довольно проблематично — активное окно приложения должно иметь стиль WS_TOOLWINDOW_EX. Фактически, любой мессадж бокс будет попадать в этот список, разрушая созданную идиллию... Однако активную форму оттюнинговать мы можем, что и показано выше.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.