Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

панель задач [D7, WinXP]


МишаК ©   (2006-07-02 20:47:00) 

как сделать так что бы прогр-ма не отображалась на панели задач?


PSPF2003   (2006-07-03 08:59:00) [1]

Вот как делаю я.
Открываем *. 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.


Elen   (2006-07-03 08:02:00) [2]


> как сделать так что бы прогр-ма не отображалась на панели
> задач?

Еще один вариант

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=false;
end;


antonn   (2006-07-03 05:34:00) [3]

SetWindowLong(application.Handle, GWL_EXSTYLE,GetWindowLong(application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);


Mr.Floppy   (2006-07-02 20:54:00) [4]

Сходи, купи книгу или научись пользоваться поисковиком

Вопрос

Как сделать так, чтобы запущенная программа не была видна на панели задач?
Ответ

Во-первых, можно по примеру 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо