Как скрыть приложение из панели задач в Windows 7?
Я хотел бы скрыть приложение из панели задач Windows 7.
Я хочу сделать что-то вроде панели инструментов на краю экрана, которая делает определенные вещи, когда пользователь нажимает на нее, но я не хочу, чтобы она отображалась на панели задач, поскольку это то, что я хочу остаться в фоновом режиме.
Я пробовал инструкции в следующем сообщении, но это не сработало в моем приложении:
Как скрыть запись в панели задач, но сохранить форму окна
Затем я попробовал его в новом пустом приложении VCL Forms и все еще не работал. Я искал другие решения, но все они делают то же самое, что и в связанном сообщении.
Что-то изменилось, что делает невозможным в Windows 7? Или есть что-нибудь, что ты
может думать, что может помешать ему работать?
Ответы
Ответ 1
Вы можете переопределить основную форму 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
"Приложения" по умолчанию "Истина", если вы используете этот метод.
Вы также можете удалить вторую строку (..WndParent: =..) и вместо этого установить PopupMode
формы в pmExplicit
в инспекторе объектов с тем же эффектом.
Кстати, здесь приведена цитата из той же темы для решения TLama:
Чтобы предотвратить включение кнопки окна на панели задач, [...] В качестве альтернативы вы можете создать скрытое окно и сделать это скрытым окно владельца видимого окна.
Когда вы устанавливаете MainFormOnTaskbar
в false, основная форма принадлежит окну приложения по дизайну VCL. И если вы скрываете окно приложения, это требование выполняется.
Ответ 2
Попробуйте использовать сложный способ, описанный в this article
:
Установите MainFormOnTaskBar
в False в файле проекта. Затем попытайтесь скрыть окно приложения из основной формы 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.
Ответ 3
ваша основная форма приложения обычно создается в 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, поэтому я предполагаю, что если вас не интересует флаг toolwindow, вы можете оставить следующую часть
i OR WS_EX_TOOLWINDOW