您现在的位置:首页 >> 硬件系统 >> 硬件系统 >> 内容

屏闭2000/XP/2003系统的Ctrl+Alt+Del热键

时间:2011/9/3 15:21:51 点击:

  核心提示:下面的方法适合任何Windows NT平台(4.0以上)(至少目前的WinNT都能支持)NT4,2000,XP,2003全部OK的,而且没有窗口闪烁,呵呵,编译后的DLL才16K,好用得很的libra...
下面的方法适合任何Windows NT平台(4.0以上)(至少目前的WinNT都能支持)
NT4,2000,XP,2003全部OK的,而且没有窗口闪烁,呵呵,编译后的DLL才16K,好用得很的

library SASWinHook;

uses Windows, Messages;

{$R *.res}

var
  FHandle: THandle;
  OldAppProc: Pointer;

function HookProc(hHandle: THandle; uMsg: Cardinal;
  wParam, lParam: Integer): LRESULT; stdcall;
var K, C: Word;  // wndproc
begin
  if uMsg = WM_HOTKEY then
     begin
        K := HIWORD(lParam);
        C := LOWORD(lParam);
        // press Ctrl + Alt + Del
        if (C and VK_CONTROL<>0) and (C and VK_MENU <>0) and ( K = VK_Delete)
           then Exit;   // disable Ctrl + Alt + Del
     end;
  Result := CallWindowProc(OldAppProc, hHandle,
    uMsg, wParam, lParam);
end;

procedure EntryPointProc(Reason: Integer);
begin
  case reason of
    DLL_PROCESS_ATTACH:
      begin  // hook SAS window wndproc
        FHandle := FindWindow('SAS window class', 'SAS window');
        if not IsWindow(FHandle) then Exit;  // is window found?
        // save old wndproc
        OldAppProc := Pointer(GetWindowLong(FHandle, GWL_WNDPROC));
        // set new wndproc
        SetWindowLong(FHandle, GWL_WNDPROC, Cardinal(@HookProc));
      end;
    DLL_PROCESS_DETACH:
      begin
        if FHandle > 0 then
           begin  // unhook
             if Assigned(OldAppProc) then
                SetWindowLong(FHandle, GWL_WNDPROC, LongInt(OldAppProc));
             OldAppProc := nil;
           end;
      end;
    end;
end;

begin
  OldAppProc := nil;
  FHandle := 0;
  DllProc := @EntryPointProc;
  EntryPointProc(DLL_PROCESS_ATTACH);
end.

作者:LY 来源:转载
共有评论 2相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号