有两种方法:
一种是showwindow(handle,sw_hide);
一种是这样:(BCB代码)
回复人:xycleo(虚竹) (2001-3-11 15:22:00)  得31分 
下面的例子代码演示了在Windows95/98下怎样通过使用RegisterServiceProcess来把你的程序从CTRL-ALT-DEL对话框中隐藏起来。//------------Header file------------------------------
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 file------------------------------
#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);
    }
}
//-------------------------------------------------
 

解决方案 »

  1.   

    用OpenProcess()实现过NT下的进程隐身
      

  2.   


    procedure TfrmMain.FormCreate(Sender: TObject);
    var
      hTaskBar:Thandle; //window的任務條
      TempHandle:Thandle; //window的桌面
    begin
    WindowState:=wsMaximized;
    Color:=clBackground;
      systemparametersinfo(spi_screensaverrunning,1,Nil,0); //使alt+tab,alt+ctrl+del失效
      hTaskBar:=FindWindow('Shell_TrayWnd',Nil); //隱藏windows任務條
      ShowWindow(hTaskBar,SW_HIDE);
      TempHandle:=FindWindow('Progman',Nil); //隱藏windows的桌面
      ShowWindow(TempHandle,SW_HIDE);
      Test_wgTransparentButton.ControlStyle := Test_wgTransparentButton.ControlStyle + [csDoubleClicks];
    end;procedure TfrmMain.FormClose(Sender: TObject;
      var Action: TCloseAction);
    var
      hTaskBar:Thandle; //window的任務條
      TempHandle:Thandle; //window的桌面
    begin
      systemparametersinfo(spi_screensaverrunning,0,Nil,0);//使alt+tab,alt+ctrl+del有效
      hTaskBar:=FindWindow('Shell_TrayWnd',Nil);  //恢復windows任務條
      ShowWindow(hTaskBar,SW_SHOWNORMAL);
      TempHandle:=FindWindow('Progman',Nil); //恢復windows桌面
      ShowWindow(TempHandle,SW_SHOWNORMAL);
    Action:=caFree; //手工釋放資源
    end;
      

  3.   

    用以上方法可使alt+ctrl+del失效
    怎样才能使其不失效,但对话框内不显示该进程?
    OpenProcess试过了,但不起作用
    请各位帮忙,谢谢!
      

  4.   

    在2000下隐藏的话
    csdn里关于这个问题还有几百分可以拿!
    可惜谁也没有拿到~~~
      

  5.   

    系统98:
    先定义
    Function RegisterServiceProcess(dwProcessID,dwType:integer):integer;stdcall;external 'kernel32.dll';
    然后使用函数:
    RegisterServiceProcess(GetCurrentProcessID,1);例子如下:
    implementation{$R *.DFM}Function RegisterServiceProcess(dwProcessID,dwType:integer):integer;stdcall;external 'kernel32.dll';procedure TForm1.FormCreate(Sender: TObject);
    begin
            RegisterServiceProcess(GetCurrentProcessID,1);        
    end;