2024年10月XP系统中如何屏蔽Ctrl+Esc键序列(5)
⑴TaskKeyMgr
⑵////////////////////////////////////////
⑶// TaskKeyMgr.h
⑷#pragma once
⑸#include "TaskKeyHook.h"
⑹/////////////////////////////////////////////////////////////////////
⑺// 使用这个类禁用任务键,任务管理器或任务栏。
⑻// 用相应的标志调用Disable,如:CTaskMgrKeys::Disable(CTaskMgrKeys::ALL);
⑼class CTaskKeyMgr {
⑽TASKMGR = x, // 禁用任务管理器(Ctrl+Alt+Del)
⑾TASKKEYS = x, //禁用任务转换键(Alt-TAB, etc)
⑿TASKBAR = x, //禁用任务栏
⒀ALL=xFFFF //禁用所有东西L
⒁static void Disable(DWORD dwItem,BOOL bDisable,BOOL bBeep=FALSE);
⒂static BOOL IsTaskMgrDisabled();
⒃static BOOL IsTaskBarDisabled();
⒄static BOOL AreTaskKeysDisabled() {
⒅return ::AreTaskKeysDisabled(); // 调用 DLL
⒆////////////////////////////////////////////////////////////////
⒇// TaskKeyMgr.cpp
⒈#include "StdAfx.h"
⒉#include "TaskKeyMgr.h"
⒊#define HKCU HKEY_CURRENT_USER
⒋// 用于禁用任务管理器策略的注册表键值对
⒌LPCTSTR KEY_DisableTaskMgr =
⒍"Software\Microsoft\Windows\CurrentVersion\Policies\System";
⒎LPCTSTR VAL_DisableTaskMgr = "DisableTaskMgr";
⒏///////////////////////////////////////////
⒐// 禁用相关的任务键
⒑// dwFlags = 表示禁用什么
⒒// bDisable = 禁用为 (TRUE) ,否则为启用 (FALSE)
⒓// bBeep = 按下非法键是否蜂鸣(指针对任务键)
⒔void CTaskKeyMgr::Disable(DWORD dwFlags, BOOL bDisable, BOOL bBeep)
⒕// 任务管理器 (Ctrl+Alt+Del)
⒖if (dwFlags & TASKMGR) {
⒗HKEY hk;
⒘if (RegOpenKey(HKCU, KEY_DisableTaskMgr,&hk)!=ERROR_SUESS)
⒙RegCreateKey(HKCU, KEY_DisableTaskMgr, &hk);
⒚if (bDisable) { // 禁用任务管理器(disable TM): set policy =
⒛DWORD val=;
RegSetValueEx(hk, VAL_DisableTaskMgr, NULL,
REG_DWORD, (BYTE*)&val, sizeof(val));
} else { // 启用任务管理器(enable TM)
RegDeleteValue(hk,VAL_DisableTaskMgr);
// 任务键 (Alt-TAB etc)
if (dwFlags & TASKKEYS)
::DisableTaskKeys(bDisable,bBeep); // 安装键盘钩