您好,欢迎来到 - 67学习网 - http://www.67xuexi.com !

XP系统中如何屏蔽Ctrl+Esc键序列

摘要:void CMyDialog::OnDisableTaskKeys(){CTaskKeyMgr::Disable(CTaskKeyMgr::TASKKEYS,!CTaskKeyMgr::AreTaskKeysDisabled(), TRUE); // 蜂鸣}void CMyDialog::OnUpdateDisableTaskKeys(CCmdUI* pCmdUI){pCmdUI->SetCheck(CTaskKeyMgr::AreTaskKeysDisabled());}void CMyDialog::OnDisableTaskbar(){CTaskKeyMgr::Disable(CTaskKeyMgr::TASKBAR,!CTaskKeyMgr::IsTaskBarDisabled());}void CMyDialog::OnUpdateDisableTaskbar(CCmdUI* pCmdUI){pCmdUI->SetCheck(CTaskKeyMgr::IsTaskBarDisabled());}void CMyDialog::OnDisable
XP系统中如何屏蔽Ctrl+Esc键序列,标签:电脑常识大全,http://www.67xuexi.com

  void CMyDialog::OnDisableTaskKeys()

  {

  CTaskKeyMgr::Disable(CTaskKeyMgr::TASKKEYS,

  !CTaskKeyMgr::AreTaskKeysDisabled(), TRUE); // 蜂鸣

  }

  void CMyDialog::OnUpdateDisableTaskKeys(CCmdUI* pCmdUI)

  {

  pCmdUI->SetCheck(CTaskKeyMgr::AreTaskKeysDisabled());

  }

  void CMyDialog::OnDisableTaskbar()

  {

  CTaskKeyMgr::Disable(CTaskKeyMgr::TASKBAR,

  !CTaskKeyMgr::IsTaskBarDisabled());

  }

  void CMyDialog::OnUpdateDisableTaskbar(CCmdUI* pCmdUI)

  {

  pCmdUI->SetCheck(CTaskKeyMgr::IsTaskBarDisabled());

  }

  void CMyDialog::OnDisableTaskMgr()

  {

  CTaskKeyMgr::Disable(CTaskKeyMgr::TASKMGR,

  !CTaskKeyMgr::IsTaskMgrDisabled());

  }

  void CMyDialog::OnUpdateDisableTaskMgr(CCmdUI* pCmdUI)

  {

  pCmdUI->SetCheck(CTaskKeyMgr::IsTaskMgrDisabled());

  }

  ////////////////////////////////////////////////////////

  // 要想让ON_UPDATE_COMMAND_UI正常工作,这是必需的。

  //

  LRESULT CMyDialog::OnKickIdle(WPARAM wp, LPARAM lCount)

  {

  UpdateDialogControls(this, TRUE);

  return 0;

  }

  按上述方法尽管禁用了任务栏,但是还有一个机关没有处理,那就是按下Windows键仍然可以弹出“开始”菜单。显然在处理VK_LWIN之前,任务栏不会检查是否被启用。一般来讲,如果某个窗口被屏蔽掉,那么它就不再会处理用户在这个窗口的输入——这就是所谓的禁用(Disable)的含义。通常调用EnableWindow(FALSE)后自然就达到了这个目的。但是处理VK_LWIN/VK_RWIN按键的代码决不会去检查任务栏启用/禁用状态。对此,本文的处理办法仍然是利用键盘钩子。修改一下TaskKeyHook实现,增加对Windows键的捕获。这样按下“开始”菜单键之后什么也不会发生。希望没有漏掉其它的按键。如果哪位读者发现漏掉了什么键,请和我联系,以便把它加到键盘钩子中去。为了简单起见,我在类CTaskKeyMgr中封装了所有禁用的函数。下面是这个类的定义击实现文件:

  TaskKeyMgr

  ////////////////////////////////////////

  // TaskKeyMgr.h

  //

  #pragma once

  #include "TaskKeyHook.h"

  /////////////////////////////////////////////////////////////////////

  // 使用这个类禁用任务键,任务管理器或任务栏。

  // 用相应的标志调用Disable,如:CTaskMgrKeys::Disable(CTaskMgrKeys::ALL);

  //

  class CTaskKeyMgr {

  public:

  enum {

  TASKMGR = 0x01, // 禁用任务管理器(Ctrl+Alt+Del)

  TASKKEYS = 0x02, //禁用任务转换键(Alt-TAB, etc)

  TASKBAR = 0x04, //禁用任务栏

  ALL=0xFFFF //禁用所有东西L

  };

  static void Disable(DWORD dwItem,BOOL bDisable,BOOL bBeep=FALSE);

  static BOOL IsTaskMgrDisabled();

  static BOOL IsTaskBarDisabled();

  static BOOL AreTaskKeysDisabled() {

  return ::AreTaskKeysDisabled(); // 调用 DLL

  }

  };

  CPP实现

  ////////////////////////////////////////////////////////////////

  // TaskKeyMgr.cpp

  //

  #include "StdAfx.h"

  #include "TaskKeyMgr.h"

  #define HKCU HKEY_CURRENT_USER

  // 用于禁用任务管理器策略的注册表键值对

  LPCTSTR KEY_DisableTaskMgr =

  "SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem";

  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_SUCCESS)

  RegCreateKey(HKCU, KEY_DisableTaskMgr, &hk);

  if (bDisable) { // 禁用任务管理器(disable TM): set policy = 1

  DWORD val=1;

  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); // 安装键盘钩

  // 任务栏

  if (dwFlags & TASKBAR) {

  HWND hwnd = FindWindow("Shell_traywnd", NULL);

  EnableWindow(hwnd, !bDisable);

  }

  }

  BOOL CTaskKeyMgr::IsTaskBarDisabled()

  {

  HWND hwnd = FindWindow("Shell_traywnd", NULL);

  return IsWindow(hwnd) ? !IsWindowEnabled(hwnd) : TRUE;

  }

  BOOL CTaskKeyMgr::IsTaskMgrDisabled()

  {

  HKEY hk;

  if (RegOpenKey(HKCU, KEY_DisableTaskMgr, &hk)!=ERROR_SUCCESS)

  return FALSE; // 没有此键,不禁用

  DWORD val=0;

上一页  [1] [2] [3] [4] [5]  下一页


Tag:电脑常识电脑常识大全电脑教程 - 电脑常识