屏蔽系统功能键(100分)

  • 主题发起人 主题发起人 axcgp
  • 开始时间 开始时间
A

axcgp

Unregistered / Unconfirmed
GUEST, unregistred user!
在WindowsXp 或 Windows2003中怎样能才能屏蔽系统功能键?
例如:屏蔽 CTRL+ESC ALT+TAB ALT+CTRL+DEL 等
 
这样的帖子在这里很多,但是真正能够实现全部需求的却基本没有...楼主可以查查看,不过基本可以不必再开新帖浪费分数了。
 
客户强列要求,看来只能死马当活马医了。
 
用底层Hook+API可以实现你的部分需求,但是要是全部实现恐怕还是有难度的...建议你弄一份“美萍”网吧管理软件参考一下,这个软件比较完美的实现了屏蔽系统功能键的需求。
 
“美萍”软件 会有源码吗?网上有得下载吗?
 
我查过了我收集的关于屏蔽系统功能键的历史帖子,有些个还是相当不错的,如果楼主需要我可以与你分享:)
 
Johnny_du:
能不能将地址发布上来。或联系我:QQ:94668098
 
换个思路吧,呵呵

(今夜,自制“温暧鼠标” 今年今夜天气特别冷,鼠标更象机器一样冰冷!下面是自制“温暧鼠标”电路原理图以及详细方法:http://www.51dz.com/n.asp?id=12402&i=z_cd )
 
通过注册表的方法进行屏蔽不行吗?
 
查看你的邮箱axcgp◎163.com,我收集的帖子已发,希望对你有所帮助,别忘了给我分数!:)呵呵
 
这个东东以前俺也弄过!!!如果不耍花招,只有一个办法在NT下实现这个功能,那就是替换Windows自己的Dll文件,网上有这方面的例子~但是个人觉得不是很好~~~
使用HOOK除了Ctrl+Alt+Del以外其他热键都可以给屏蔽了~惟独Ctrl+Alt+Del是无法通过HOOK来屏蔽的,我这里用别的方法实现了~,你看合适你用不~:)
下面这个函数功能就是启动多个桌面(explorer.exe)并把新启动的桌面做为当前桌面,并且可以允许多个桌面之间的切换。
使用方法是:
newDesktop(2);//就启动了一个新的桌面
newDesktop(1);//就返回系统原先的桌面
经过,我实验,当切换到一个新桌面的时候,使用Ctrl+Alt+Del,哈哈~资源管理器不见了,但是你只要切回第一个桌面的时候就发现是怎么回事了:)原因是他只会弹到第一个系统启动的桌面下面:)呵呵~~功能和屏蔽了是一样的效果。
procedure NewDesktop(N: integer);
var name: string;
DsktpHandle: HDESK;
SysPath: array[1..MAX_PATH] of char;
PPath: PChar;
StrPath: string;
len: integer;
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
begin
if N = 1 then
name := 'Default'
else
name := 'NewDesktop' + inttostr(N);

ZeroMemory(@si, sizeof(STARTUPINFO));
si.cb := sizeof(STARTUPINFO);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow := SW_SHOW;
si.lpDesktop := PChar(Name);

DsktpHandle := OpenDesktop(pchar(Name),
DF_ALLOWOTHERACCOUNTHOOK, true,
DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or
DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or
DESKTOP_JOURNALPLAYBACK or
DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or
DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS);
if DsktpHandle = 0 then
begin
// 桌面不存在,创建桌面
DsktpHandle := CreateDesktop(PChar(Name), nil, nil,
DF_ALLOWOTHERACCOUNTHOOK,
DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or
DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or
DESKTOP_JOURNALPLAYBACK or
DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or
DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS,
nil);
if DsktpHandle = 0 then
begin
ShowMessage('打开桌面失败! ' + SysErrorMessage(GetLastError));
exit;
end;
PPath := @SysPath;
len := GetWindowsDirectory(@SysPath, MAX_PATH);
SetString(StrPath, PPath, len);
if (not CreateProcess(PChar(StrPath + '/explorer.exe'), nil, nil, nil, True, 0, nil, nil, si, pi)) then
begin
ShowMessage('进程创建失败! ' + SysErrorMessage(GetLastError));
CloseDeskTop(DsktpHandle);
exit;
end;
end;
SwitchDesktop(DsktpHandle);
end;

看你合用否~要是能用~呵呵~别忘了给我加分哦~
 
问题已改用其他方式解决,谢谢你们的支持!
 
后退
顶部