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

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

摘要:}// 是否屏蔽任务键序列——也就是说键盘钩子是否安装?// 注:这里假设没有其它钩子做同样的事情//DLLEXPORT BOOL AreTaskKeysDisabled(){return g_hHookKbdLL != NULL;}// 屏蔽任务键:安装低级键盘构// 返回当前是否屏蔽标志(TRUE/FALSE)//DLLEXPORT BOOL DisableTaskKeys(BOOL bDisable, BOOL bBeep){if (bDisable) {if (!g_hHookKbdLL) {g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD_LL,MyTaskKeyHookLL, MyDll.m_hInstance, 0);}} else if (g_hHookKbdLL != NULL) {UnhookWindowsHookEx(g_hHookKbdLL);g_hHookKbdLL = NULL;}g_bBeep = bBeep;return AreTaskKeysDisabled();}Tas
XP系统中如何屏蔽Ctrl+Esc键序列,标签:电脑常识大全,http://www.67xuexi.com

  }

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

  // 是否屏蔽任务键序列——也就是说键盘钩子是否安装?

  // 注:这里假设没有其它钩子做同样的事情

  //

  DLLEXPORT BOOL AreTaskKeysDisabled()

  {

  return g_hHookKbdLL != NULL;

  }

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

  // 屏蔽任务键:安装低级键盘构

  // 返回当前是否屏蔽标志(TRUE/FALSE)

  //

  DLLEXPORT BOOL DisableTaskKeys(BOOL bDisable, BOOL bBeep)

  {

  if (bDisable) {

  if (!g_hHookKbdLL) {

  g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD_LL,

  MyTaskKeyHookLL, MyDll.m_hInstance, 0);

  }

  } else if (g_hHookKbdLL != NULL) {

  UnhookWindowsHookEx(g_hHookKbdLL);

  g_hHookKbdLL = NULL;

  }

  g_bBeep = bBeep;

  return AreTaskKeysDisabled();

  }

  TaskKeyHook 输出两个函数:DisableTaskKeys 和 AreTaskKeysDisabled。前者安装WH_KEYBOARD_LL 钩子;后者判断这个钩子是否安装。此键盘钩子的处理思路是截获Alt+Tab,Ctrl+Esc,Alt+Esc以及Windows 键VK_LWIN/VK_RWIN,关于这两个键,稍候会有详细描述。当钩子碰到这些键时,它直接返回到调用者,而不是将处理传递给CallNextHookEx 。

  LRESULT CALLBACK MyTaskKeyHookLL(...)

  {

  if (/* 任务键*)

  return 1; // 立即返回

  return CallNextHookEx(...);

  }

  TaskKeyHook的大部分实现都很简单。只有一个地方用到了一点小技巧:既使用#pragma data_seg 命名包含全程数据的数据段,并且用#pragma comment (linker...)告诉链接器让这个数据段为共享段。实现细节请参考源代码。本文附带的例子程序(TrapKeys.exe)汇集了上述几个有关屏蔽键盘按键序列的功能,除此之外,它还有一个功能就是禁用任务栏。因为既然禁用了任务转换键,那么一般来说,也必然要禁用任务栏,否则禁用任务转换键就没有意义了。禁用任务栏的具体方法如下:

  HWND hwnd = FindWindow("Shell_traywnd", NULL);//找到任务栏

  EnableWindow(hwnd, FALSE); // 禁用任务栏

  如图四是例子程序运行画面:

  图四 TrapKeys程序运行画面

  以下是TrapKeys程序的实现代码:

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

  // TrapKeys.cpp

  //

  #include "stdafx.h"

  #include "resource.h"

  #include "StatLink.h"

  #include "TaskKeyMgr.h"

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

  // 主对话框

  //

  class CMyDialog : public CDialog {

  public:

  CMyDialog(CWnd* pParent = NULL) : CDialog(IDD_MYDIALOG, pParent) { }

  protected:

  HICON m_hIcon;

  CStaticLink m_wndLink1;

  CStaticLink m_wndLink2;

  CStaticLink m_wndLink3;

  virtual BOOL OnInitDialog();

  // 命令/UI 的更新处理

  afx_msg void OnDisableTaskMgr();

  afx_msg void OnDisableTaskKeys();

  afx_msg void OnDisableTaskbar();

  afx_msg void OnUpdateDisableTaskMgr(CCmdUI* pCmdUI);

  afx_msg void OnUpdateDisableTaskKeys(CCmdUI* pCmdUI);

  afx_msg void OnUpdateDisableTaskbar(CCmdUI* pCmdUI);

  afx_msg LRESULT OnKickIdle(WPARAM,LPARAM);

  DECLARE_MESSAGE_MAP()

  };

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

  // 标准的MFC 对话框应用类代码。

  //

  class CMyApp : public CWinApp {

  public:

  virtual BOOL InitInstance() {

  // 初始化app:运行对话框

  CMyDialog dlg;

  m_pMainWnd = &dlg;

  dlg.DoModal();

  return FALSE;

  }

  virtual int ExitInstance() {

  // 为了按全起见,在退出程序的时候,将所有禁用的项目复原

  CTaskKeyMgr::Disable(CTaskKeyMgr::ALL, FALSE);

  return 0;

  }

  } theApp;

  BEGIN_MESSAGE_MAP(CMyDialog, CDialog)

  ON_COMMAND(IDC_DISABLE_TASKKEYS,OnDisableTaskKeys)

  ON_COMMAND(IDC_DISABLE_TASKBAR, OnDisableTaskbar)

  ON_COMMAND(IDC_DISABLE_TASKMGR, OnDisableTaskMgr)

  ON_UPDATE_COMMAND_UI(IDC_DISABLE_TASKKEYS, OnUpdateDisableTaskKeys)

  ON_UPDATE_COMMAND_UI(IDC_DISABLE_TASKBAR, OnUpdateDisableTaskbar)

  ON_UPDATE_COMMAND_UI(IDC_DISABLE_TASKMGR, OnUpdateDisableTaskMgr)

  ON_MESSAGE(WM_KICKIDLE,OnKickIdle)

  END_MESSAGE_MAP()

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

  // 初始化对话框:子类化超链接柄加栽图标

  //

  BOOL CMyDialog::OnInitDialog()

  {

  CDialog::OnInitDialog();

  // 初始化超链接

  m_wndLink1.SubclassDlgItem(IDC_EMAIL,this);

  m_wndLink2.SubclassDlgItem(IDC_VCKBASEURL,this);

  m_wndLink3.SubclassDlgItem(IDC_VCKBASELINK,this);

  // 自己设置对话框图标。MFC不会为对话框应用程序设置它

  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

  SetIcon(m_hIcon, TRUE); // 打图标

  SetIcon(m_hIcon, FALSE); // 小图标

  return TRUE;

  }

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

  // 命令/UI 更新处理:写这些东西应该很轻松。

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


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