Хотите скрыть свою программу? Что может
быть проще!
Создайте новый проект. Свойства формы biMinimize и
biMaximize (группа BorderIcons)
установите в false. Поместите на форму всплывающее
меню (компонент PopupMenu), и создайте три пункта:
Show, Hide и Exit. Поместите на форму компонент
RxTrayIcon из состава RxLib. Свяжите свойство
RxTrayIcon PopupMenu с Вашим
PopupMenu. Если у Вас еще нет библиотеки RxLib
(настоятельно рекомендую установить ее), воспользуйтесь компонентом
TrayIcon из раздела Samples
палитры компонентов VCL Borland C++ Builder 6. В
результате получится что-то вроде того, что изображено на рисунке.
Подготовительные операции закончены.
Теперь приступим к самому главному. Как скрыть свою программу в диспетчере задач
- сделать ее процессом! В Microsoft® Windows® XP
в диспетчере задач ловится в процессах! Для этого воспользуемся функцией
WinAPI RegisterServiceProcess. Эта
функция объявлена следующим образом: BOOL RegisterServiceProess(DWORDdwProcessId,DWORDdwType); где
dwProcessId - идентификатор процесса, dwType - что нужно делать, 1 - зарегистрировать процесс, 0 - удалить из
процессов.
Соответственно, в случае успешного выполнения функции возвращается 1, при
возникновении ошибки - 0.
Небольшое замечание - для вызова функции необходимо использовать указатель. Сама
функция находится в KERNEL32.DLL(кто
еще не знает что это такое?), и получить ее адрес
поможет другая функция WinAPI GetProcAddress.
В Borland C++ Builder 6 в меню
Project выберите пункт View Source и добавьте
следующий код, как показано в листинге.
В обработчик событий формы OnShow и
OnHide вставьте соответствующий код:
ShowWindow(Application->Handle, SW_SHOW);
и
ShowWindow(Application->Handle, SW_HIDE);
а в обработчики пунктов меню:
Form1->Show();
Form1->Hide();
Close();
Почти все готово. Теперь удалим нашу программу с
панели задач. Это делает следующий код, который необходимо поместить между
Application->Initialize();
и Application->CreateForm(__classid(TForm1),
&Form1);
который управляет расширенными стилями при создании окна
приложения.
И наконец, уберем кнопку закрытия формы. Поместите следующий
код в обработчик события формы OnCreate.
HMENU MenuHandle =
GetSystemMenu(WindowHandle, false); if(MenuHandle)
DeleteMenu(MenuHandle,
SC_CLOSE, MF_BYCOMMAND);
Все готово. Запустите проект на выполнение.
Наслаждайтесь своими знаниями!