이 팁은 담비님(천리안 FREKBS)님이 1999년 04월 14일에 천리안 프로그래머포럼에 올리신 것입니다.
담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다.
좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다.
───────────────────────────────────────
안녕하세요! 담비입니다.
출처 :
http://www.bcbdev.com/faqs/faq82.htm
Windows 95/98에서 ALT-CTL-DEL DialogBox로부터 Application 감추는 간단한 방법은
Application Object의 Title을 지우는것이다. 만일 프로그램의 메인 윈도우가
타이틀을 갖지 않는다면, Windows 95는 ALT-CTL-DEL DialogBox에 프로그램을
표시하지 않는다. Title 프로퍼티를 지우기에 적합한 곳은 WinMain 함수이다.
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Title = "";
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
프로그램을 숨기는 다른 방법은 RegisterServiceProcess API 함수에 의해 호출된
서비스 모드 프로그램인것처럼 등록시키는것이다. RegisterServiceProcess는
KERNEL32.DLL에 있는 비문서화 함수이다. 함수의 원형이 MS SDK의 헤더파일에
기술되어있지는 않지만 Bonland의 C++ Builder용 import library에서 찾을수 있다.
분명히, 이 함수의 주된 목적은 service-mode program을 생성하는 것이다.
내가 "분명히"라고 말하는 이유는 MSDN에서 이 함수에 관하여 실질적으로 아무것도
말하지 않았기 때문이다.
아래의 예제 코드는 Windows 98/98에서 ALT-CTL-DEL DialogBox로부터 프로그램을
숨기기 위해 RegisterServicePorcess를 사용하는 방법을 보여주고 있다.
헤더 파일
typedef DWORD (__stdcall *pRegFunction)(DWORD, DWORD);
class TForm1 : public TForm
{
__published:
TButton *Button1;
private:
HINSTANCE hKernelLib;
pRegFunction RegisterServiceProcess;
public:
__fastcall TForm1(TComponent* Owner);
__fastcall ~TForm1();
};
CPP 파일
#include "Unit1.h"
#define RSP_SIMPLE_SERVICE 1
#define RSP_UNREGISTER_SERVICE 0
__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);
}
}
__fastcall TForm1::~TForm1()
{
if(hKernelLib)
{
if(RegisterServiceProcess)
RegisterServiceProcess(GetCurrentProcessId(),
RSP_UNREGISTER_SERVICE);
FreeLibrary(hKernelLib);
}
}
//-------------------------------------------------
NOTE : RegisterServiceProcess는 Windows NT에는 존재하지 않는다.