也是转贴
如果你不想自己的程序被从Ctrl+Alt+Del弹出的窗口中强行关闭,
介绍一个Windows未公布的API函数给你:RegisterServiceProcess(ProcessID:Long,Type:Long)该函数存在于Kernel32.dll中.Process指向进程的ID,Type表示是否向系统注册该进程,是1,否0./////////////////////////////////////////////////////////////////////////////
function RegisterServiceProcess(a:longint;const b:longint):dword;stdcall;far;external 'Kernel32.dll' name 'RegisterServiceProcess';ddd:=GetCurrentProcessId;
if (RegisterServiceProcess(ddd,1)=0) then 
 showmessage('error!');////////////////////////////////////////////////////////////////////////////
用未公开函数RegisterServiceProcess
#define RSP_SIMPLE_SERVICE 1
#define RSP_UNREGISTER_SERVICE 0//下面代码为隐藏
DWORD dwID,redserv;
dwID = GetCurrentProcessId();
regserv = RegisterServiceProcess(pid,RSP_SIMPLE_SERVICE);
//恢复隐藏
dwID= GetCurrentProcessId()
regserv = RegisterServiceProcess(pid,RSP_UNREGISTER_SERVICE);
                                                               

解决方案 »

  1.   

    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0);
    调用频幕保护
      

  2.   

    关于屏蔽上面的热建,我的建议是屏蔽掉CTRL,ALT
    这样在98和2000下都能用
    private
      procedure AppMessage(var Msg:TMsg;var handled:Boolean);
    procedure TForm1.AppMessage(...);
    begin
      Handled:=False;
      case Msg.Message of
        WM_SYSKEYDOWN:
           begin
             if Msg.wParam=vk_tab then
                handled:=True;
             if Msg.wParam=vk_Control then
                handled:=true;
           end;
    end;
    form  OnCreate
       Application.OnMessage:=AppMessage;
    对于第二个问题
    在2000下可以用
     Application.Title:='';
    但是这种方法,在98下显示为空行
      

  3.   

    当然,对于第一个问题
    在OnKeyDown里面
      if ssTab in shift then
        begin
         //add yourcode here
        end;
     if ssctrl in shift then
       begin
        //add yourcode here
       end;