Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как спрятать програму от Alt+Tab?
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
anjey
есть основная форма (при запуске невидима) на ней куча всяких настроек (вызывается из трея) в частности как должна выглядеть вторая форма (поверх всех окон или нет, прозрачная - или нет)
вторая форма видима - на ней отображается текущее время и пр.
из панели задач обе формы я убрал, но все они видны через Alt+Tab при отображении на экране
тобиш

.....
MainForm.FormCreate(Sender: TObject);
begin
// непоказывать окно приложения
Application.ShowMainForm := False;
// скрыть окна из панели задач
SetWindowLong (Application.Handle,GWL_EXSTYLE,NOT WS_EX_APPWINDOW);
....
end;

во втром модуле кроме обработчика события на таймере ничего нет
если использовать
h := FindWindow (nil, 'Program Manager');
windows.setparent (handle, h);
то потом все попытки настроить вид второй формы бесполезны
zubr
Эта тема уже обсуждалась ]]>здесь]]>
anjey
да там ваще какуюто хе№;% несли
какие там еще драйвера
у меня на компе миранда стоит в процесах видна, а по Alt+Tab нет, хотя окно на экране видно

и если внимательно читать че написано выше то можно понять ято приложение выполняет какието действия и драйвером или сервисом его ну никак не назовеш

кста тут поковырялся
короче немного поиграл с параметрами SetWindowLong (без windows.setparent)
вроде получается тока есть пару но
- вид основного окна как у окна инструментов
- при включении поверх всех окон все настройки сбрасываются и форма видна по Alt+Tab

// непоказывать окно приложения
Application.ShowMainForm := False;
SetWindowLong (Application.Handle,GWL_EXSTYLE,NOT (WS_EX_APPWINDOW ));
SetWindowLong (Основная форма.Handle,GWL_EXSTYLE, GetWindowLong (Основная форма,GWL_EXSTYLE) OR WS_EX_TOOLWINDOW);
SetWindowLong (Вторая форма.Handle,GWL_EXSTYLE, GetWindowLong (Вторая форма.Handle,GWL_EXSTYLE) OR WS_EX_TOOLWINDOW);
Barmutik
Попробуйте следующее:

  ExtendedStyle := GetWindowLong(application.Handle, GWL_EXSTYLE);
 SetWindowLong(Application.Handle,GWL_EXSTYLE, ExtendedStyle or (not WS_EX_APPWINDOW));


И во второй форме:

  protected
   procedure CreateParams(var Params: TCreateParams); override;

...............

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 with Params do begin
   ExStyle := ExStyle or WS_EX_TOPMOST;
   WndParent := GetDesktopwindow;
 end;
end;

procedure TForm2.FormCreate(Sender: TObject);
var
 CurStyle: Integer;
begin
 CurStyle := GetWindowLong(Handle, GWL_EXSTYLE);
 CurStyle := (CurStyle or WS_EX_TOOLWINDOW) and (not WS_EX_APPWINDOW);
 SetWindowLong(Handle, GWL_EXSTYLE, CurStyle);
end;


В Вин2000 и ХР всё работает...

Да и кстати не стоит так негативно отзываться о том что было написано в топиках mad.gif
Там обсуждалась немного другая тема...
Guest
а как установить параметр поверх всех окон для второй формы если окно уже отображено на экране
например при нажатии на кнопку
Barmutik
В нашем варианте сходу установить его не получилось ... надо смотреть возможно ли это вообще...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.