ОБСУЖДЕНИЕ

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

5 ответов 7,7 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
есть основная форма (при запуске невидима) на ней куча всяких настроек (вызывается из трея) в частности как должна выглядеть вторая форма (поверх всех окон или нет, прозрачная - или нет)
вторая форма видима - на ней отображается текущее время и пр.
из панели задач обе формы я убрал, но все они видны через 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);
то потом все попытки настроить вид второй формы бесполезны
 
Эта тема уже обсуждалась link removed
 
да там ваще какуюто хе№;% несли
какие там еще драйвера
у меня на компе миранда стоит в процесах видна, а по 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);
 
Попробуйте следующее:

Код:
 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:
Там обсуждалась немного другая тема...
 
а как установить параметр поверх всех окон для второй формы если окно уже отображено на экране
например при нажатии на кнопку
 
В нашем варианте сходу установить его не получилось ... надо смотреть возможно ли это вообще...
 
Статус
Закрыто для дальнейших ответов.