屏蔽Ctrl+Alt+Delete组合键的方法

来源:互联网 发布:知乎 净化空气植物 编辑:程序博客网 时间:2024/05/01 23:51
如果想要屏蔽组合键必须使用全局钩子
创建一个全局钩子,创建钩子SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)keyboardProc,pinstance,0);//挂上钩子
如果想要使用WH_KEYBOARD_LL这个参数,必须在windowNT系统下,如果想要在windowXP中使用,就要在工程的stdafx.h文件里加入两个宏
#define        _WIN32_WINNT        0x0500
#define        WIN_VER             0x0500
有这个extern "C" LRESULT CALLBACK keyboardProc(int code, WPARAM wparam,LPARAM lparam)//钩子处理函
{
  return 1;
}
可以屏蔽除Ctrl+Alt+Delete组合键之外的所有键盘消息。
屏蔽Ctrl+Alt+Delete组合键的方法
由于每次使用这个组合键就会调出资源管理器,如果在设置钩子时就打开资源管理器并最小化,就会产生相当于屏蔽Ctrl+Alt+Delete组合键的效果,
在钩子取消的时候再把资源管理器关闭掉就可以了


启动资源管理器
//====打开指定的exe文件
CString exeStr= "C:\\WINDOWS\\system32\\taskmgr.exe";   //设置要执行的应用程序路径
SHELLEXECUTEINFO Info;    
memset (&Info, 0, sizeof(Info)) ;
Info.cbSize=sizeof (Info) ;
Info.lpVerb="open" ;
Info.lpFile=exeStr;
Info.lpParameters=NULL;
Info.fMask=SEE_MASK_NOCLOSEPROCESS ;
Info.nShow=SW_SHOWDEFAULT ;
if (! ShellExecuteEx (&Info))    
{
MessageBox("执行程序操作失败!","信息提示",MB_OK);
}
把资源管理器最小化
       HWND t_hwnd = ::FindWindow(NULL, "Windows 任务管理器");
       ::ShowWindow(t_hwnd,SW_HIDE);
关闭资源管理器
  //====遍历线程 -- 需要包含头文件#include <tlhelp32.h>
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32* info=new PROCESSENTRY32;
info->dwSize=sizeof(PROCESSENTRY32);
int iProcessID; //===线程ID
if(Process32First(handle,info))
{
if(GetLastError()==ERROR_NO_MORE_FILES )
{
AfxMessageBox("No More Process");
}
else
{
CString ProcessID,strProcessName;
ProcessID.Format("%d",info->th32ProcessID);
strProcessName.Format("%s",info->szExeFile);
while(Process32Next(handle,info)!=FALSE)
{
ProcessID.Format("%5d",info->th32ProcessID);
strProcessName.Format("%s",info->szExeFile);
if (!strProcessName.Compare("taskmgr.exe"))
{
//====关闭线程
iProcessID = atoi(ProcessID);
HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,TRUE,info->th32ProcessID);
if(h!=NULL)
{
if(h!=NULL)
{
//===关闭线程
TerminateProcess(h,0);
}
}
break;
}
}
}
}
CloseHandle(handle);


如果想要锁定计算机屏幕,并电子黑屏,可以在钩子弹出一个对话框进行全屏,去掉标题栏和最小化,最大化,关闭按钮;刷成黑屏;
在钩子对话框销毁时取消钩子!
原创粉丝点击