Как спрятать програму от Alt+Tab?

  • Автор темы anjey
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

anjey

#1
есть основная форма (при запуске невидима) на ней куча всяких настроек (вызывается из трея) в частности как должна выглядеть вторая форма (поверх всех окон или нет, прозрачная - или нет)
вторая форма видима - на ней отображается текущее время и пр.
из панели задач обе формы я убрал, но все они видны через 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);
то потом все попытки настроить вид второй формы бесполезны
 
A

anjey

#3
да там ваще какуюто хе№;% несли
какие там еще драйвера
у меня на компе миранда стоит в процесах видна, а по 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);
 
B

Barmutik

#4
Попробуйте следующее:

Код:
 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 и ХР всё работает...

Да и кстати не стоит так негативно отзываться о том что было написано в топиках :angry:
Там обсуждалась немного другая тема...
 
G

Guest

#5
а как установить параметр поверх всех окон для второй формы если окно уже отображено на экране
например при нажатии на кнопку
 
B

Barmutik

#6
В нашем варианте сходу установить его не получилось ... надо смотреть возможно ли это вообще...
 
Статус
Закрыто для дальнейших ответов.