Форум: "Начинающим";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Внизпанель задач Найти похожие ветки
← →
МишаК (2006-07-02 20:47) [0]как сделать так что бы прогр-ма не отображалась на панели задач?
← →
Mr.Floppy (2006-07-02 20:54) [1]Сходи, купи книгу или научись пользоваться поисковиком
Вопрос
Как сделать так, чтобы запущенная программа не была видна на панели задач?
Ответ
Во-первых, можно по примеру Back Orifice воспользоваться функцией RegisterServiceProcess (только для Win9x).
Во-вторых, предположим, вы пользуетесь компонентой TrxTrayIcon из rxLib, иначе непонятно, как вы будете возвращать программу обратно из минимизированного состояния.
type
TForm1 = class(TForm)
Label1: TLabel;
RxTrayIcon1: TRxTrayIcon;
procedure FormCreate(Sender : TObject);
procedure RxTrayIcon1DblClick(Sender: TObject);
private
procedure ApplicationMinimize(Sender : TObject);
procedure ApplicationRestore(Sender : TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize := ApplicationMinimize;
Application.OnRestore := ApplicationRestore;
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.ApplicationMinimize(Sender : TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.ApplicationRestore(Sender : TObject);
begin
ShowWindow(Application.Handle, SW_RESTORE);
end;
procedure TForm1.RxTrayIcon1DblClick(Sender: TObject);
begin
Application.Restore;
Application.BringToFront;
end;
Только сpазу предупреждаю про некоторые проблемы — будь готов к тому, что если пpи попытке закрытия приложения в OnCloseQuery или OnClose выводится вопрос о подтверждении, то могут быть проблемы с автоматическим завершением пpогpаммы пpи shutdown — под Win95 просто зависает, под WinNT не завершается. Очевидно, что сообщение выводится, но его не видно (причем SW_RESTORE не сpабатывает). Решение — ловить WM_QUERYENDSESSION и после всяких завеpшающих действий и вызова CallTerminateProcs выдавать Halt.
Из конференции Delphi
Вопрос
Необходимо скрыть приложение. Так чтоб его не было на панели задач и не было видно под Ctrl+Alt+Del? Желательно пример кода или ссылки на него?
Ответ
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external "KERNEL32.DLL"; procedure TForm1.Button1Click(Sender: TObject); begin RegisterServiceProcess(GetCurrentProcessId, 1); //Убираем из Alt-Ctrl-Del (0 — показать) ShowWindow(Application.Handle, SW_HIDE); //Убираем из TaskBar SetWindowLong(Application.Handle, GWL_EXSTYLE, //Убираем само приложение GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); end;
Из конференции Expert_FAQ
soobcha.org
← →
antonn © (2006-07-03 05:34) [2]
SetWindowLong(application.Handle, GWL_EXSTYLE,GetWindowLong(application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
← →
Elen © (2006-07-03 08:02) [3]
> как сделать так что бы прогр-ма не отображалась на панели
> задач?
Еще один вариант
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=false;
end;
← →
PSPF2003 © (2006-07-03 08:59) [4]Вот как делаю я.
Открываем *. Dpr
В секции Uses дописываем Windows
Ниже объявляем
EStyle : integer;
И делаем присваивание
EStyle := GetWindowLong(Application.Handle , GWL_EXSTYLE);
И устанавливаем стиль.
SetWindowLong(Application.Handle , GWL_EXSTYLE, EStyle or WS_EX_TOOLWINDOW);
Полный вид :
program Fast;
uses
Forms,
Windows,
Unit1 in "Unit1.pas" {FastForm},
Unit2 in "Unit2.pas" {ExtFile};
{$R *.res}
var
EStyle : integer;
begin
Application.Initialize;
EStyle := GetWindowLong(Application.Handle , GWL_EXSTYLE);
SetWindowLong(Application.Handle , GWL_EXSTYLE, EStyle or WS_EX_TOOLWINDOW);
Application.Title := "Fast";
Application.CreateForm(TFastForm, FastForm);
Application.Run;
end.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.02 c