C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[156] [팁] 95계열에서 CTL-ALT-DEL Dialog에서 프로그램 숨기기
박지훈.임프 [cbuilder] 7503 읽음    2001-08-02 18:32
이 팁은 담비님(천리안 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에는 존재하지 않는다.

+ -

관련 글 리스트
156 [팁] 95계열에서 CTL-ALT-DEL Dialog에서 프로그램 숨기기 박지훈.임프 7503 2001/08/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.