急!!!屏蔽ctrl+alt+del还有问题请教各位高手!(nt下)

neighborgirl 2002-09-23 10:20:54
我要在nt 下屏蔽ctrl+alt+del
我搜索了以前的帖子,找到了以下程序!但其中还有几个问题要请教各位:
1.编译是提示:找不到variants.dcu文件,何故?是不是还要有一个varants单元?
2.其中的hook单元没有提供,有没有必要加上,那位高手能给我提供?
谢谢!!!
但我把引用hook单元的语句和variants删除掉,程序运行后不起作用,即 ctrl+alt+del还是可以用
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,extctrls, variants,
StdCtrls;

type
TForm1 = class(TForm)
about: TButton;
enable: TButton;
disable: TButton;
exit: TButton;
procedure aboutClick(Sender: TObject);
procedure enableClick(Sender: TObject);
procedure disableClick(Sender: TObject);
procedure exitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses hook;
{$R *.DFM}
type
//Declaration from VC++ WINUSER.H
//
PKBDLLHOOKSTRUCT=^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT=record
vkCode:DWORD;
scanCode:DWOrD;
flags:DWORD;
dwExtraInfo:DWORD;
end;

const
LLKHF_ALTDOWN=KF_ALTDOWN shr 8;
WH_KEYBOARD_LL=13;

var
hhkNTKeyboard:HHOOK; //钩子句柄
//低级键盘钩子回掉函数
//

function lowlevelkeyboardfunc(ncode:integer;w_param:wparam;l_param:lparam):lresult;stdcall;
var
bleatkeystroke:boolean;
p:pkbdllhookstruct;
begin
bleatkeystroke:=false;
if ncode=hc_action then
begin
case w_param of
wm_keydown,wm_syskeydown,wm_keyup,wm_syskeyup:
begin
p:=pkbdllhookstruct(l_param);
//进行按键过滤
bleatkeystroke:=(((p^.vkcode=vk_tab) and
((p^.flags and llkhf_altdown)<>0)) or
((p^.vkcode=vk_escape) and
((p^.flags and llkhf_altdown)<>0)) or
((p^.vkCode=vk_escape) and
((getkeystate(vk_control) and $8000)<>0)) or
((p^.vkcode=vk_delete) and
((p^.flags and llkhf_altdown)<>0 ) and
((getkeystate(vk_control) and $8000) <> 0)));
end;
end; //end of case
end;
if bleatkeystroke then
begin
result:=1; //捕获这些组合键,按键消息由自己处理,必须返回1
hook.showhookinfo; //显示一个窗口,你可以改为自己的处理代码

end
else
///其他的按键,交由别的线程处理(过滤)
result:=callnexthookex(0,ncode,w_param,l_param);

end;
procedure TForm1.aboutClick(Sender: TObject);
begin
//Application.MessageBox(PChar('Windows NT 键盘钩子演示程序'#13#10#13#10'作者:Phoenix2000,2001年7月。'),'关于本程序',0);
end;

procedure TForm1.enableClick(Sender: TObject);
begin
//挂上键盘钩子
//
hhkNTKeyboard:=SetWindowsHookEx(WH_KEYBOARD_LL,
LowLevelKeyboardFunc,
HInstance,0);
if hhkNTKeyboard<>0 then
Application.MessageBox('系统键盘钩子已经启动了!','信息',64)
else
Application.MessageBox('无法启动系统键盘钩子!','错误',16);
end;


procedure TForm1.disableClick(Sender: TObject);
begin
//解除键盘钩子
//
if hhkNTKeyboard=0 then
Application.MessageBox('系统键盘钩子已经被禁止了!','警告',48)
else
begin
UnhookWindowsHookEx(hhkNTKeyboard); //卸载钩子
hhkNTKeyboard:=0;
Hook.ClearHookForm; //此行代码与钩子无关,不要误解,是我自己的窗体清除
Application.MessageBox('成功卸载系统键盘钩子!','信息',64)
end
end;

procedure TForm1.exitClick(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
hhkntkeyboard:=0; //钩子句炳初值
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
canclose:=(hhkntkeyboard=0);
if not canclose then
application.MessageBox('请先卸载系统键盘钩子,然后再退出本程序!','警告',48);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if hhkntkeyboard<>0 then
begin
unhookwindowshookex(hhkntkeyboard);
hhkntkeyboard:=0;
end;
hook.cleanhookform;
end;

end.
...全文
31 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lance09 2002-09-23
  • 打赏
  • 举报
回复
楼上兄弟说的正是
日总是我哥 2002-09-23
  • 打赏
  • 举报
回复
还是帮你找出来了~~

http://www.csdn.net/magazine/source/11/s200111.doc



================================================================
     ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆

下载地址:
 http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
 http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
日总是我哥 2002-09-23
  • 打赏
  • 举报
回复
好像使用HOOK不行,HOOK不到那三个键!!

两年前很多人已经对这个问题作过深入的探讨,未果!

推荐你看看这篇文章:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我kao~~本来想帮你找出那篇文章的地址的!CSDN太慢 了,我受不了,等了10几分钟了~~
自己看吧!前几其的程序员杂志(我忘了是第几期,好像3\4期)介绍过!
不过它是用VC实现的,自己转换一下代码就是了~~比较简单

================================================================
     ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆

下载地址:
 http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
 http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
Drate 2002-09-23
  • 打赏
  • 举报
回复
这么多的代码?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧