Вопрос
У меня такая проблема, нужна прога которая запускалась при запуске компа, не была видна в трее, и в определенный день и час удалила бы без возможности восстановления один каталог.
Ответ
Для того, чтобы убрать программу из TaskBar'а и Task Manager'а (Ctrl-Alt-Del) надо использовать следующий код:
function RegisterServiceProcess(ProcessID, Typ: Integer): Integer;
external 'KERNEL32.DLL';
procedure TForm1.Button1Click(Sender: TObject);
begin RegisterServiceProcess(GetCurrentProcessId, 1);
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;
Для того, чтобы скрыть главную форму:
{*********}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := false;
end;
{*********}
Хотя в данном случае можно вообще без формы все сделать — заходим в Project/View Sorce, убираем там все, что связано с формой и там же пишем необходимый код (только о разделе Uses надо позаботиться).
Для того, чтобы программа сама запускалась необходимо внести изменения в реестр:
{*********}
uses Registry;
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false);
reg.WriteString('My App', Application.ExeName);
reg.CloseKey;
reg.free;
end;
{*********}
В этом случае программа будет запускаться каждый раз при запуске Windows. А можно сделать еще интереснее: использовать ключ RunOnce, а не просто Run. Тогда программа запуститься при следующем запуске Windows, а ссылка на нее автоматически удалится. Программа проверит дату (в самом простом случае — это if DateToStr(Now) = 'дд.мм.гггг' — для того, чтобы посмотреть в каком формате у вас на машине представлены данные и в зависимости от этого писать условие, напишите Form1.Caption = DateToStr(Now)), и если окажется так, что нужный день еще наступил, то просто выполнит повторную запись в реестр. Если же нужный день наступил, то она выполнит свое дело и все. Для проверки времени надо использовать TimeToStr(Now), а можно DateTimeToStr(Now).
Как удалить файл без возможности его восстановления я не знаю. Но можно перезаписать на его место какой-нибудь другой или, если удаляются exe'шники — дописать в него пару строк — тогда он не запустится. Для удаления каталога надо учесть, что он должен быть пустым. Я не буду приводить код этого дела — в Сети достаточно примеров. Назову только основные функции:
FileExists — проверка существования файла
DeleteFile — удаление файла
RenameFile — переименование файла
RemoveDir — удаление каталога
Для поиска — FindNext и FindFirst.
И еще одна деталь. Программы, создаваемые Delphi, получаются довольно большими (приложение с пустой формой в Delphi 7 — 359 Кб). Поэтому если вам необходимо, чтобы запуск вашей программы при старте Windows был как можно более прозрачным, используйте упаковщики exe файлов. Один из них можно взять на http://aclab2.chat.ru называется Compressor (после его применения размер файла сократился до 149 Кб). Есть еще один — UPX Shell — http://iont.virtualave.net/
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация