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

转:LYSoft Liu Yang

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

别问我怎么Inject DLL到EXE呀,嘻嘻:)

元旦快乐,新年新气象~~~

library SASWinHook;

{
  SASWinHook
  copyrights by Liu Yang LYSoft http://lysoft.7u7.net 2006.1.1

  usage: only need to inject this dll to WinLogon.exe
}

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值