Ukrycie aplikacji z okienka CTRL-ALT-DEL

Często zachodzi potrzeba, aby nasz program działał w całkowitym ukryciu. Jednak nie wystarczy ukrycie formularza, ponieważ program jest widoczny (i można go też zamknąć) z okienka, które wyświetla się po naciśnięciu klawiszy CTRL+ALT+DEL. Poniżej znajduje się przykład na ukrycie programu i z tego okienka, może jest on troche zawiły, ale wystarczy tylko przepisać poniższy kod we właściwe miejsca. Na początek w pliku nagłówkowym głównego formularza zaraz za ostatnią dyrektywą include umieszczamy:

Unit1.h

typedef DWORD (__stdcall *pRegFunction)(DWORD, DWORD);

następnie w sekcjach private i public umieszczamy następujące deklaracje:

Unit1.h

private:
   HINSTANCE hKernelLib;
   pRegFunction RegisterServiceProcess;
public:
   __fastcall ~TForm1();

w pliku formularz (np. Unit1.cpp) umieszczamy po dyrektywach include, a przed dyrektywami pragma:

Unit1.cpp

#define RSP_SIMPLE_SERVICE 1
#define RSP_UNREGISTER_SERVICE 0

w konstruktorze formularza:

Unit1.cpp

__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
   hKernelLib = LoadLibrary("kernel32.dll");
   if (hKernelLib)
   {
      RegisterServiceProcess =
         (pRegFunction)GetProcAddress(hKernelLib, "RegisterServiceProcess");
      if (RegisterServiceProcess)
         RegisterServiceProcess(GetCurrentProcessId(), RSP_SIMPLE_SERVICE);
   }

}

na koniec napiszemy destruktor formularza:

Unit1.cpp

__fastcall TForm1::~TForm1()
{
   if (hKernelLib)
   {
      if (RegisterServiceProcess)
         RegisterServiceProcess(GetCurrentProcessId(), RSP_UNREGISTER_SERVICE);
      FreeLibrary(hKernelLib);
   }
}

Ta metoda nie działa w Windows NT, natomiast działa w 95/98 bez problemu.