Как скрыть приложение с панели задач в Windows 7?
Я хотел бы скрыть приложение от панели задач Windows 7.
Я хочу сделать что-то вроде панели инструментов на краю экрана, которая делает определенные вещи, когда пользователь нажимает на нее, но я не хочу, чтобы это отображалось на панели задач, так как это то, что я хочу, чтобы остаться в фоновом режиме,
Я попробовал инструкции в следующем посте, но это не сработало в моем приложении:
Как скрыть запись панели задач, но сохранить форму окна
Тогда я попробовал это на новом пустом Приложении VCL Forms, и это все еще не работало. Я искал другие решения, но все они делают то же самое, что и в связанном посте.
Что-то изменилось, что делает это невозможным в Windows 7? Или вы можете придумать что-нибудь, что может помешать этому?
3 ответа
Вы можете переопределить основную форму CreateParam
убрать флаг, который заставляет кнопку панели задач (WS_EX_APPWINDOW
) и дополнительно сделать форму, принадлежащую окну приложения. Это делает противоположное требование для оболочки разместить кнопку панели задач для окна. Из " Управление кнопками панели задач":
[..] Чтобы убедиться, что кнопка окна размещена на панели задач, создайте неизвестное окно с расширенным стилем WS_EX_APPWINDOW. [..]
Образец:
type
TForm1 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
Params.WndParent := Application.Handle;
end;
Не меняйте состояние MainFormOnTaskbar
свойство 'Application' из значения по умолчанию 'True', если вы используете этот метод.
Вы также можете удалить вторую строку (..WndParent:= ..) и вместо этого установить PopupMode
формы для pmExplicit
в инспекторе объектов на тот же эффект.
Кстати, вот цитата документации из той же темы для решения TLama опубликовано:
Чтобы кнопка окна не помещалась на панель задач, [...] в качестве альтернативы вы можете создать скрытое окно и сделать его скрытым владельцем видимого окна.
Когда вы установите MainFormOnTaskbar
в false основная форма принадлежит окну приложения VCL design. А если скрыть окно приложения, требование выполнено.
Попробуйте использовать хитрый способ, описанный в this article
:
Установить MainFormOnTaskBar
Ложь в вашем файле проекта. Затем попытайтесь скрыть окно приложения от основной формы OnShow
а также OnActivate
обработчики событий. Таким образом, ваш проект может выглядеть следующим образом:
Project1.dpr:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := False;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Unit1.pas:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
end.
Основная форма вашего приложения обычно создается в dpr, поэтому откройте dpr и найдите строку, которая создает основную форму.
// add this line first
// blank app title will prevent app from showing in the applications list in task manager
Application.Title := '';
// this line is already in the dpr and creates the main form, the class will differ
Application.CreateForm(TMainForm, Result);
// make the main form invisible to windows taskbar/task switcher
i := GetWindowLong(Application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, i OR WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW);
я знаю, что это работает на XP и 7. Я предполагаю, что это хорошо и для 8. это добавляет флаг окна инструмента и удаляет флаг appwindow, так что я думаю, что если вас не интересует флаг окна инструментов, вы можете пропустить следующую часть
i OR WS_EX_TOOLWINDOW