|
36 Как можно сделать прогу, которую нельзя увидеть в списке задач при нажатии Ctrl+Alt+Del, которая не реагирует на нажатие клавиш Alt+F4, Ctrl+Break, и.т.д.?
// ======================== для WIN98/WINME ==========================
/*Я делаю так:
1 - главная форма /StayOnTop/
2 - Background форма
/Windowstate=wsMaximized/BorderStyle=bsNone/BorerIcons - все в
false/FormStyle=fsNormal/переменная CanDelete для управления закрытием в
OnCloseQuery
При активации включается режим скринсейвера и рабочий стол накрывается
формой без заголовка - это блокирует Alt-Tab, Ctrl-Alt-Del
Alt-F4 - блокируй в OnCloseQuery*/
// убрать программу из списка задач - регистрируем ее как процесс
void __fastcall TFMainForm::FormCreate(TObject *Sender)
{
// Убрать процесс из панели задач Windows
typedef int (__stdcall *RegisterServiceProcess) (int , int);
HANDLE hkernel32;
RegisterServiceProcess rgProcess;
hkernel32 = GetModuleHandle("kernel32.dll");
rgProcess = (RegisterServiceProcess)GetProcAddress(hkernel32,"RegisterServiceProcess");
rgProcess(GetCurrentProcessId(), 1);
}
// проверка перед закрытием
void __fastcall TFMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
// Проверка пароля перед выходом
TFPass *pass = new TFPass(this);
pass->PassText = "";
if (pass->ShowModal() == mrOk)
if (pass->PassText == "my password")
CanClose = true;
else
{
MessageDlg("password error", mtError, TMsgDlgButtons() << mbOK,0);
CanClose = false;
}
else
CanClose = false;
}
// для включения режима защиты:
void __fastcall TFMainForm::EnableAccess()
{
// Удалить бэкгроунд форму
if (Form6)
{
Form6->CanDelete = false;
delete Form6;
Form6 = NULL;
}
// выключить режим эмуляции скринсейвера
SystemParametersInfo (SPI_SCREENSAVERRUNNING,0,&OLDSysPrm,0);
}
// для выключения режима защиты:
void __fastcall TFMainForm::DisableAccess()
{
// режим скринсейвера
SystemParametersInfo (SPI_SCREENSAVERRUNNING,1,&OLDSysPrm,0);
// Background form
if (!Form6)
{
Form6 = new TForm6(Application);
Form6->CanDelete = false;
Form6->Show();
}
}
|
|
|