县共青团改革方案4 1:delphi如何屏蔽任意按键..?

来源:百度文库 编辑:高考问答 时间:2024/05/05 10:53:13
delphi中有什么控件可以屏蔽任意按键..(请说说控件的名字)



用什么代码可以屏蔽任意按键(请列出代码出来)
可以举个例子吗..?
假如我想屏蔽Alt+Ctrl+del该如何呢

SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @tmp, 0);
这一个我试了M遍了..不成功在2003系统下

用KeyHook可以屏蔽
如果没有这个控件可以去网上下载
如果你用的是正版的delphi,它在system面板里

补充:
原来你是要屏闭组合键
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @tmp, 0);
一句话搞定
KeyHook只能屏闭单个按键

我没用过2003的,刚才在XP下写了个函数,希望对你有用

两个按钮是做测试用的,可以无视
记得用过函数后要用SHChangeNotify进行刷新

还有一点,屏蔽Ctrl+Alt+Delete的原理和屏蔽其他键不同
如果是一般的屏蔽,用SetWindowsHookEx函数就行了

unit Unit1;

interface

uses
Windows, Forms, Classes, Messages, SysUtils, Menus, shellapi, ExtCtrls,
ShlObj, Registry, Controls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure EnableCTRLALTDEL(YesNo : boolean);
const
sRegPolicies = '\Software\Microsoft\Windows\CurrentVersion\Policies';
begin
with TRegistry.Create do
try
RootKey:=HKEY_CURRENT_USER;
if OpenKey(sRegPolicies+'\System\',True) then
begin
case YesNo of
False:
begin
WriteInteger('DisableTaskMgr',1); //任务管理
WriteInteger('DisableLockWorkstation',1);//用户锁定计算机
WriteInteger('DisableChangePassword',1);//用户更改口令
end;
True:
begin
WriteInteger('DisableTaskMgr',0);
WriteInteger('DisableLockWorkstation',0);
WriteInteger('DisableChangePassword',0);
end;
end;
end;
CloseKey;
if OpenKey(sRegPolicies+'\Explorer\',True) then
begin
case YesNo of
False:
begin
WriteInteger('NoChangeStartMenu',1); //开始菜单
WriteInteger('NoClose',1); // 关闭系统菜单
WriteInteger('NoLogOff',1);//注销菜单
WriteInteger('NoRun',1);//运行菜单
WriteInteger('NoSetFolders',1);//设置菜单
end;
True:
begin
WriteInteger('NoChangeStartMenu',0);
WriteInteger('NoClose',0);
WriteInteger('NoLogOff',0);
WriteInteger('NoRun',0);
end;
end;
end;
CloseKey;
finally
Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnableCTRLALTDEL(true);//屏闭
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NiL, NiL); //刷新系统
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
EnableCTRLALTDEL(false);//解除屏闭
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NiL, NiL);
end;

end.

rarnu,der 厉害佩服,