婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > XP系統(tǒng)中屏蔽Ctrl+Esc鍵序列的方法

XP系統(tǒng)中屏蔽Ctrl+Esc鍵序列的方法

熱門(mén)標(biāo)簽:宿州電商外呼系統(tǒng)收費(fèi) 石家莊公交地圖標(biāo)注 桂林云電銷(xiāo)機(jī)器人 yeta電銷(xiāo)機(jī)器人騷擾 200元辦理400電話(huà) 小米外呼系統(tǒng) 怎樣給原神地圖標(biāo)注資源 gta5完整地圖標(biāo)注軍事基地 惠陽(yáng)地圖標(biāo)注
  對(duì)于用過(guò)Windows的人,幾乎沒(méi)有人不知道Ctrl+Alt+Del組合鍵,尤其是在使用經(jīng)常死機(jī)的Windows9x時(shí),使用它的頻率更高,這一組合鍵是專(zhuān)門(mén)為了系統(tǒng)安全起見(jiàn)提供的緊急出口。VC知識(shí)庫(kù)在線(xiàn)雜志第11期,ac952_z_cn在他的個(gè)人專(zhuān)欄中寫(xiě)過(guò)一篇關(guān)于這方面的文章:“WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL”。因此本文側(cè)重于介紹在Windows XP中如何實(shí)現(xiàn)屏蔽CTRL+ALT+DEL組合鍵,也就是任務(wù)管理器,任務(wù)切換組合鍵(Alt+Tab),任務(wù)欄和“開(kāi)始”菜單(Ctrl+Esc,VK_LWIN,VK_RWIN)。這個(gè)方法也能應(yīng)用于Windows 2000環(huán)境。

  在Windows 9x/Me系統(tǒng)中,屏蔽Ctrl+Alt+Del和各種任務(wù)開(kāi)關(guān)鍵的方法是通過(guò)下面的方法實(shí)現(xiàn)的:

  BOOL bOldState;

  SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, bOldState, 0);

  MS大佬認(rèn)為這種方法很業(yè)余,所以在Windows NT/2000/XP中對(duì)此進(jìn)行了修改。在這些較新的Windows版本中用戶(hù)登陸使用Winlogon和GINA——Graphical Identification and Authentication,意思是圖形化的身份認(rèn)證,挺嚇唬人的是不是!其實(shí)就那么回事。Winlogon是Windows系統(tǒng)的一部分,它專(zhuān)門(mén)提供交互式登陸支持,而GINA則是Winlogon用來(lái)實(shí)現(xiàn)認(rèn)證的一個(gè)DLL——這個(gè)DLL就是msgina.dll。WlxInitialize、WlxActivateUserShell便是其中輸出,當(dāng)然不知這兩個(gè),還有別的。前者進(jìn)行自身的初始化,后者激活用戶(hù)的外殼程序。Windows就是用這個(gè)DLL來(lái)實(shí)現(xiàn)用戶(hù)名+口令的身份認(rèn)證的,但是開(kāi)發(fā)人員可以用自己的GINA代替msgina.dll。例如,實(shí)現(xiàn)智能卡、視網(wǎng)膜掃描儀、DNA檢查等等認(rèn)證機(jī)制來(lái)代替輸入用戶(hù)名+口令形式的身份檢查。 下面的表格中列出了與GINA有關(guān)的全部函數(shù)。其中有一個(gè)是WlxLoggedOnSAS,當(dāng)按下Ctrl+Alt+Del 鍵時(shí),Winlogon便調(diào)用這個(gè)函數(shù)。

  (表一)GINA 函數(shù)一覽表 函數(shù) 描述

  WlxActivateUserShell激活用戶(hù)外殼程序

  WlxDisplayLockedNotice允許GINA DLL 顯示鎖定信息

  WlxDisplaySASNotice 當(dāng)沒(méi)有用戶(hù)登陸時(shí),Winlogon調(diào)用此函數(shù)

  WlxDisplayStatusMessageWinlogon 用一個(gè)狀態(tài)信息調(diào)用此函數(shù)進(jìn)行顯示

  WlxGetConsoleSwitchCredentials Winlogon調(diào)用此函數(shù)讀取當(dāng)前登陸用戶(hù)的信任信息,并透明地將它們傳到目標(biāo)會(huì)話(huà)

  WlxGetStatusMessage Winlogon 調(diào)用此函數(shù)獲取當(dāng)前狀態(tài)信息

  WlxInitialize 針對(duì)指定的窗口位置進(jìn)行GINA DLL初始化

  WlxIsLockOk 驗(yàn)證工作站正常鎖定

  WlxIslogoffOk 驗(yàn)證注銷(xiāo)正常

  WlxLoggedOnSAS 用戶(hù)已登陸并且工作站沒(méi)有被加鎖,如果此時(shí)接收到SAS事件,則Winlogon 調(diào)用此函數(shù)

  WlxLoggedOutSAS 沒(méi)有用戶(hù)登陸,如果此時(shí)收到SAS事件,則Winlogon 調(diào)用此函數(shù)

  WlxLogoff 請(qǐng)求注銷(xiāo)操作時(shí)通知GINA DLL

  WlxNegotiate 表示當(dāng)前的Winlogon版本是否能使用GINA DLL

  WlxNetworkProviderLoad 在加載網(wǎng)絡(luò)服務(wù)提供程序收集了身份和認(rèn)證信息后,Winlogon 調(diào)用此函數(shù)

  WlxRemoveStatusMessage Winlogon 調(diào)用此函數(shù)告訴GINA DLL 停止顯示狀態(tài)信息

  WlxScreensaverNotify 允許GINA與屏幕保護(hù)操作交互

  WlxShutdown 在關(guān)閉之前Winlogon 調(diào)用此函數(shù),允許GINA實(shí)現(xiàn)任何關(guān)閉任務(wù),例如從讀卡器中退出智能卡

  WlxStartApplication 當(dāng)系統(tǒng)需要在用戶(hù)的上下文中啟動(dòng)應(yīng)用程序時(shí)調(diào)用此函數(shù)

  WlxWkstaLockedSAS當(dāng)工作站被鎖定,如果接收到一個(gè)SAS,則Winlogon 調(diào)用此函數(shù)

  在默認(rèn)情況下,GINA顯示登陸對(duì)話(huà)框,用戶(hù)輸入用戶(hù)名及口令。所以要想屏蔽掉Ctrl+Alt+Del,則可以寫(xiě)一個(gè)新的MyGina.dll,其中提供接口調(diào)用msgina.dll的函數(shù)WlxLoggedOnSAS,從而實(shí)現(xiàn)Ctrl+Alt+Del屏蔽。或者編寫(xiě)一個(gè)鍵盤(pán)驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)。

  難道屏蔽Ctrl+Alt+Del真的象上述所說(shuō)的那么麻煩嗎?有沒(méi)有更好的方法呢?答案是肯定的。所以忘掉GINA吧,使用操作系統(tǒng)的策略設(shè)置完全可以搞掂這個(gè)問(wèn)題。方法是進(jìn)入"開(kāi)始"菜單,選擇"運(yùn)行",然后在運(yùn)行對(duì)話(huà)框中輸入"gpedit.msc",啟動(dòng)Windows系統(tǒng)的組策略編輯器。在左邊窗格查看"用戶(hù)配置|管理模板|系統(tǒng)|登錄/注銷(xiāo)",則在右邊窗格策略里不難發(fā)現(xiàn)"禁用任務(wù)管理器"一項(xiàng)。

  組策略編輯器

  通過(guò)對(duì)這個(gè)策略的設(shè)置可以屏蔽掉Ctrl+Alt+Del。如果要通過(guò)編寫(xiě)代碼來(lái)實(shí)現(xiàn),則必須操作下面的注冊(cè)表項(xiàng):

  HKCU\

  Software\

  Microsoft\

  Windows\

  CurrentVersion\

  Policies\

  System\DisableTaskMgr = dword:1

  如此設(shè)置之后,則在Windows XP中,如果用戶(hù)按下Ctrl+Alt+Del,則會(huì)彈出一個(gè)出錯(cuò)對(duì)話(huà)框,

  注意這里假設(shè)在控制面板中“用戶(hù)帳號(hào)”管理的“選擇登錄和注銷(xiāo)選項(xiàng)”設(shè)置啟用了“使用歡迎屏幕”一項(xiàng)。

  否則,XP將使用Windows的傳統(tǒng)登錄模式,要求用戶(hù)輸入帳戶(hù)名。并且Ctrl+Alt+Del組合鍵的 行為也和傳統(tǒng)的行為一樣,注冊(cè)表中DisableTaskMgr的設(shè)置也只是將登錄/注銷(xiāo)對(duì)話(huà)框中的任務(wù)管理器按鈕屏蔽或置灰。 有人可能會(huì)問(wèn),有關(guān)任務(wù)管理器的文檔又沒(méi)有明確說(shuō)明,那你是怎么知道DisableTaskMgr是用來(lái)禁用任務(wù)管理器的呢?告訴你吧, 我是在使用GPEDIT時(shí)發(fā)現(xiàn)的。GPEDIT是一個(gè)非常有用的工具,不僅可以用它來(lái)編輯策略,還可以用它來(lái)發(fā)現(xiàn)策略。利用這個(gè)工具可以輕松控制Windows的許多東西,從許可權(quán)限的存取到是否使用IE的傳統(tǒng)外觀,從是否顯示對(duì)話(huà)框中的Places Bar到是否用Ctrl+Alt+Del 啟動(dòng)任務(wù)管理器。總之用它可以配置上百個(gè)界面行為,因此它是一個(gè)足以讓系統(tǒng)管理員垂延三尺的工具。一旦找到了感興趣的策略,那如何知道相應(yīng)的注冊(cè)表位置呢?有兩種方法。第一種是比較粗魯?shù)霓k法:在修改策略的前后將注冊(cè)表輸出到一個(gè).reg文件,然后比較它們有什么不同。所有的策略無(wú)外乎以下的四個(gè)注冊(cè)表鍵:

  // 用戶(hù)指定

  HKEY_CURRENT_USER\Software\Policies

  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies

  // 機(jī)器指定

  HKEY_LOCAL_MACHINE\Software\Policies

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies

  第二種方法是直搗信息源頭--檢查描述策略的管理模板文件(.adm)。下面是Windows XP的system.adm文件對(duì) DisableTaskMgr的描述:(Windows 2000對(duì)此的描述稍有不同,其細(xì)節(jié)請(qǐng)參考Windows 2000的資源開(kāi)發(fā)包)

  CATEGORY !!CADOptions

  #if version >= 4

  EXPLAIN !!CADOptions_Help

  #endif

  KEYNAME "Software\Microsoft\Windows\CurrentVersion\Policies\System"

  POLICY !!DisableTaskMgr

  #if version >= 4

  SUPPORTED !!SUPPORTED_Win2k

  #endif

  EXPLAIN !!DisableTaskMgr_Help

  VALUENAME "DisableTaskMgr"

  END POLICY

  ;

  ; More Ctrl+Alt+Del policies here...

  ;

  END CATEGORY ; Ctrl+Alt+Del options

  ……

  ……

  DisableTaskMgr_Help="防止用戶(hù)啟動(dòng)''任務(wù)管理器''(Taskmgr.exe)。\n\n如果該設(shè)置被啟用,并且用戶(hù)試圖啟動(dòng)任務(wù)管理器,系統(tǒng)

  會(huì)顯示消息,解釋是一個(gè)策略禁止了這個(gè)操作。\n\n任務(wù)管理器讓用戶(hù)啟動(dòng)或終止程序,監(jiān)視計(jì)算機(jī)性能,查看及監(jiān)視計(jì)算機(jī)上所有運(yùn)行

  中的程序 (包含系統(tǒng)服務(wù)), 搜索程序的執(zhí)行文件名,及更改程序運(yùn)行的優(yōu)先順序。"

  DisableTaskMgr="刪除任務(wù)管理器"

  以上是DisableTaskMgr的描述片斷

  正是在這段描述中KEYNAME 和VALUENAME指定了注冊(cè)表的鍵值對(duì)。利用這種方法,你可以為自己的應(yīng)用程序創(chuàng)建管理模板和策略,但編輯和瀏覽.adm模板文件的編輯器必須支持Unicode字符。如Notepad或者WordPad等都可以。此外,使用管理模板文件,系統(tǒng)管理員可以用它為整個(gè)組織配置需要的策略——由此可以看出,此文件在系統(tǒng)中的地位舉足輕重!有關(guān)模板管理文件格式的詳細(xì)信息請(qǐng)參考平臺(tái)SDK。最后需要強(qiáng)調(diào)的是DisableTaskMgr只是禁用Ctrl+Alt+Del的功能。下面我們來(lái)討論如何捕獲它的按鍵序列。要想截獲Ctrl+Alt+Del,有三種可選擇的方法:

  1、 編寫(xiě)一個(gè)GINA代理;此方法我們?cè)谝院蟮奈恼轮薪榻B。實(shí)際上,ac952_z_cn的個(gè)人專(zhuān)欄文章:“WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL”使用的就是這種方法。

  2、 編寫(xiě)一個(gè)鍵盤(pán)驅(qū)動(dòng)程序;本文例子程序使用的方法。

  3、 用自己的程序代替任務(wù)管理器程序TaskMgr.exe。

  屏蔽Ctrl+Alt+Del解決方案的具體實(shí)現(xiàn)細(xì)節(jié)請(qǐng)參考本文的例子代碼。

  下面讓我們來(lái)解決屏蔽任務(wù)切換鍵序列的問(wèn)題,這些鍵序列包括Alt+Tab、Ctrl+Esc、Alt+Esc、VK_LWIN/VK_RWIN以及任務(wù)欄。在很早以前的Window 3.1年代,處理這個(gè)問(wèn)題的方法是通過(guò)WM_SYSKEYDOWN實(shí)現(xiàn)。到了Windows 9x時(shí)期,本文前面提到過(guò)對(duì)這個(gè)問(wèn)題的處理方法,使用SPI_SETSCREENSAVERRUNNING。但是進(jìn)入Windows NT 4.0 (SP3 +),Windows 2000以及Windows XP時(shí)代,對(duì)這個(gè)問(wèn)題的處理已經(jīng)有所不同,必須寫(xiě)一個(gè)低級(jí)的鍵盤(pán)驅(qū)動(dòng)鉤子。不要怕,因?yàn)橐獙?shí)現(xiàn)這個(gè)鉤子并不是很難。本文下面會(huì)介紹如何實(shí)現(xiàn)這個(gè)鍵盤(pán)鉤子。一般來(lái)講,系統(tǒng)級(jí)鉤子必須是一個(gè)DLL。下面是本文提供的一個(gè)鍵盤(pán)鉤子DLL的源代碼片斷(TaskKeyHook.dll):

  頭文件

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

  //TaskKeyHook.h

  //

  #define DLLIMPORT __declspec(dllimport)

  DLLIMPORT BOOL DisableTaskKeys(BOOL bEnable, BOOL bBeep);

  DLLIMPORT BOOL AreTaskKeysDisabled();

  實(shí)現(xiàn)文件

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

  // TaskKeyHook.cpp

  //

  #define _WIN32_WINNT 0x0500 // for KBDLLHOOKSTRUCT

  #include // MFC core and standard components

  #define DLLEXPORT __declspec(dllexport)

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

  // App (DLL) object

  //

  class CTaskKeyHookDll : public CWinApp {

  public:

  CTaskKeyHookDll() { }

  ~CTaskKeyHookDll() { }

  } MyDll;

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

  // 下面的代碼表示這一部分在此DLL所有實(shí)例之間共享

  // 低級(jí)鍵盤(pán)鉤子一定是系統(tǒng)級(jí)的鉤子

  //

  #pragma data_seg (".mydata")

  HHOOK g_hHookKbdLL = NULL; // 鉤子句柄

  BOOL g_bBeep = FALSE; // 按下非法鍵時(shí)蜂鳴響鈴

  #pragma data_seg ()

  #pragma comment(linker, "/SECTION:.mydata,RWS") // 告訴鏈接器:建立數(shù)據(jù)共享段

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

  // 低級(jí)鍵盤(pán)鉤子

  // 截獲任務(wù)轉(zhuǎn)換鍵:不傳遞直接返回

  //

  LRESULT CALLBACK MyTaskKeyHookLL(int nCode, WPARAM wp, LPARAM lp)

  {

  KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lp;

  if (nCode==HC_ACTION) {

  BOOL bCtrlKeyDown =

  GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1);

  if ((pkh->vkCode==VK_ESCAPE bCtrlKeyDown) || // Ctrl+Esc

  // Alt+TAB

  (pkh->vkCode==VK_TAB pkh->flags LLKHF_ALTDOWN) ||

  // Alt+Esc

  (pkh->vkCode==VK_ESCAPE pkh->flags LLKHF_ALTDOWN)||

  (pkh->vkCode==VK_LWIN || pkh->vkCode==VK_RWIN)) { // 開(kāi)始菜單

  if (g_bBeep (wp==WM_SYSKEYDOWN||wp==WM_KEYDOWN))

  MessageBeep(0); // 蜂鳴

  return 1; // 不再往CallNextHookEx傳遞,直接返回

  }

  }

  return CallNextHookEx(g_hHookKbdLL, nCode, wp, lp);

  }

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

  // 是否屏蔽任務(wù)鍵序列——也就是說(shuō)鍵盤(pán)鉤子是否安裝?

  // 注:這里假設(shè)沒(méi)有其它鉤子做同樣的事情

  //

  DLLEXPORT BOOL AreTaskKeysDisabled()

  {

  return g_hHookKbdLL != NULL;

  }

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

  // 屏蔽任務(wù)鍵:安裝低級(jí)鍵盤(pán)構(gòu)

  // 返回當(dāng)前是否屏蔽標(biāo)志(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 輸出兩個(gè)函數(shù):DisableTaskKeys 和 AreTaskKeysDisabled。前者安裝WH_KEYBOARD_LL 鉤子;后者判斷這個(gè)鉤子是否安裝。此鍵盤(pán)鉤子的處理思路是截獲Alt+Tab,Ctrl+Esc,Alt+Esc以及Windows 鍵VK_LWIN/VK_RWIN,關(guān)于這兩個(gè)鍵,稍候會(huì)有詳細(xì)描述。當(dāng)鉤子碰到這些鍵時(shí),它直接返回到調(diào)用者,而不是將處理傳遞給CallNextHookEx 。

  LRESULT CALLBACK MyTaskKeyHookLL(...)

  {

  if (/* 任務(wù)鍵*)

  return 1; // 立即返回

  return CallNextHookEx(...);

  }

  TaskKeyHook的大部分實(shí)現(xiàn)都很簡(jiǎn)單。只有一個(gè)地方用到了一點(diǎn)小技巧:既使用#pragma data_seg 命名包含全程數(shù)據(jù)的數(shù)據(jù)段,并且用#pragma comment (linker...)告訴鏈接器讓這個(gè)數(shù)據(jù)段為共享段。實(shí)現(xiàn)細(xì)節(jié)請(qǐng)參考源代碼。本文附帶的例子程序(TrapKeys.exe)匯集了上述幾個(gè)有關(guān)屏蔽鍵盤(pán)按鍵序列的功能,除此之外,它還有一個(gè)功能就是禁用任務(wù)欄。因?yàn)榧热唤昧巳蝿?wù)轉(zhuǎn)換鍵,那么一般來(lái)說(shuō),也必然要禁用任務(wù)欄,否則禁用任務(wù)轉(zhuǎn)換鍵就沒(méi)有意義了。禁用任務(wù)欄的具體方法如下:

  HWND hwnd = FindWindow("Shell_traywnd", NULL);//找到任務(wù)欄

  EnableWindow(hwnd, FALSE); // 禁用任務(wù)欄

  如圖四是例子程序運(yùn)行畫(huà)面:

  圖四 TrapKeys程序運(yùn)行畫(huà)面

  以下是TrapKeys程序的實(shí)現(xiàn)代碼:

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

  // TrapKeys.cpp

  //

  #include "stdafx.h"

  #include "resource.h"

  #include "StatLink.h"

  #include "TaskKeyMgr.h"

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

  // 主對(duì)話(huà)框

  //

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

  };

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

  // 標(biāo)準(zhǔn)的MFC 對(duì)話(huà)框應(yīng)用類(lèi)代碼。

  //

  class CMyApp : public CWinApp {

  public:

  virtual BOOL InitInstance() {

  // 初始化app:運(yùn)行對(duì)話(huà)框

  CMyDialog dlg;

  m_pMainWnd = dlg;

  dlg.DoModal();

  return FALSE;

  }

  virtual int ExitInstance() {

  // 為了按全起見(jiàn),在退出程序的時(shí)候,將所有禁用的項(xiàng)目復(fù)原

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

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

  // 初始化對(duì)話(huà)框:子類(lèi)化超鏈接柄加栽圖標(biāo)

  //

  BOOL CMyDialog::OnInitDialog()

  {

  CDialog::OnInitDialog();

  // 初始化超鏈接

  m_wndLink1.SubclassDlgItem(IDC_EMAIL,this);

  m_wndLink2.SubclassDlgItem(IDC_VCKBASEURL,this);

  m_wndLink3.SubclassDlgItem(IDC_VCKBASELINK,this);

  // 自己設(shè)置對(duì)話(huà)框圖標(biāo)。MFC不會(huì)為對(duì)話(huà)框應(yīng)用程序設(shè)置它

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

  SetIcon(m_hIcon, TRUE); // 打圖標(biāo)

  SetIcon(m_hIcon, FALSE); // 小圖標(biāo)

  return TRUE;

  }

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

  // 命令/UI 更新處理:寫(xiě)這些東西應(yīng)該很輕松。

  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;

  }

  按上述方法盡管禁用了任務(wù)欄,但是還有一個(gè)機(jī)關(guān)沒(méi)有處理,那就是按下Windows鍵仍然可以彈出“開(kāi)始”菜單。顯然在處理VK_LWIN之前,任務(wù)欄不會(huì)檢查是否被啟用。一般來(lái)講,如果某個(gè)窗口被屏蔽掉,那么它就不再會(huì)處理用戶(hù)在這個(gè)窗口的輸入——這就是所謂的禁用(Disable)的含義。通常調(diào)用EnableWindow(FALSE)后自然就達(dá)到了這個(gè)目的。但是處理VK_LWIN/VK_RWIN按鍵的代碼決不會(huì)去檢查任務(wù)欄啟用/禁用狀態(tài)。對(duì)此,本文的處理辦法仍然是利用鍵盤(pán)鉤子。修改一下TaskKeyHook實(shí)現(xiàn),增加對(duì)Windows鍵的捕獲。這樣按下“開(kāi)始”菜單鍵之后什么也不會(huì)發(fā)生。希望沒(méi)有漏掉其它的按鍵。如果哪位讀者發(fā)現(xiàn)漏掉了什么鍵,請(qǐng)和我聯(lián)系,以便把它加到鍵盤(pán)鉤子中去。為了簡(jiǎn)單起見(jiàn),我在類(lèi)CTaskKeyMgr中封裝了所有禁用的函數(shù)。下面是這個(gè)類(lèi)的定義擊實(shí)現(xiàn)文件:

  TaskKeyMgr

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

  // TaskKeyMgr.h

  //

  #pragma once

  #include "TaskKeyHook.h"

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

  // 使用這個(gè)類(lèi)禁用任務(wù)鍵,任務(wù)管理器或任務(wù)欄。

  // 用相應(yīng)的標(biāo)志調(diào)用Disable,如:CTaskMgrKeys::Disable(CTaskMgrKeys::ALL);

  //

  class CTaskKeyMgr {

  public:

  enum {

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

  TASKKEYS = 0x02, //禁用任務(wù)轉(zhuǎn)換鍵(Alt-TAB, etc)

  TASKBAR = 0x04, //禁用任務(wù)欄

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

  };

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

  static BOOL IsTaskMgrDisabled();

  static BOOL IsTaskBarDisabled();

  static BOOL AreTaskKeysDisabled() {

  return ::AreTaskKeysDisabled(); // 調(diào)用 DLL

  }

  };

  CPP實(shí)現(xiàn)

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

  // TaskKeyMgr.cpp

  //

  #include "StdAfx.h"

  #include "TaskKeyMgr.h"

  #define HKCU HKEY_CURRENT_USER

  // 用于禁用任務(wù)管理器策略的注冊(cè)表鍵值對(duì)

  LPCTSTR KEY_DisableTaskMgr =

  "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";

  LPCTSTR VAL_DisableTaskMgr = "DisableTaskMgr";

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

  // 禁用相關(guān)的任務(wù)鍵

  //

  // dwFlags = 表示禁用什么

  // bDisable = 禁用為 (TRUE) ,否則為啟用 (FALSE)

  // bBeep = 按下非法鍵是否蜂鳴(指針對(duì)任務(wù)鍵)

  //

  void CTaskKeyMgr::Disable(DWORD dwFlags, BOOL bDisable, BOOL bBeep)

  {

  // 任務(wù)管理器 (Ctrl+Alt+Del)

  if (dwFlags TASKMGR) {

  HKEY hk;

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

  RegCreateKey(HKCU, KEY_DisableTaskMgr, hk);

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

  DWORD val=1;

  RegSetValueEx(hk, VAL_DisableTaskMgr, NULL,

  REG_DWORD, (BYTE*)val, sizeof(val));

  } else { // 啟用任務(wù)管理器(enable TM)

  RegDeleteValue(hk,VAL_DisableTaskMgr);

  }

  }

  // 任務(wù)鍵 (Alt-TAB etc)

  if (dwFlags TASKKEYS)

  ::DisableTaskKeys(bDisable,bBeep); // 安裝鍵盤(pán)鉤

  // 任務(wù)欄

  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; // 沒(méi)有此鍵,不禁用

  DWORD val=0;

  DWORD len=4;

  return RegQueryValueEx(hk, VAL_DisableTaskMgr,

  NULL, NULL, (BYTE*)val, len)==ERROR_SUCCESS val==1;

  }

  這個(gè)類(lèi)中的函數(shù)都是靜態(tài)的,實(shí)際上CTaskKeyMgr完全就是一個(gè)名字空間。你可以在自己的程序中隨心所欲地使用它。例如,禁用任務(wù)轉(zhuǎn)換按鍵和任務(wù)欄,但是不禁用Ctrl+Alt+Del:

  CTaskKeyMgr::Disable(CTaskKeyMgr::TASKKEYS |

  CTaskKeyMgr::TASKBAR, TRUE);

  此外,還有幾個(gè)函數(shù)是用來(lái)檢查當(dāng)前禁用了哪些東西,甚至可以在用戶(hù)按下禁用鍵時(shí)發(fā)出蜂鳴聲……自己去享受Paul的源代碼吧!

標(biāo)簽:四平 本溪 武威 山南 襄陽(yáng) 馬鞍山 駐馬店 海南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《XP系統(tǒng)中屏蔽Ctrl+Esc鍵序列的方法》,本文關(guān)鍵詞  系統(tǒng),中,屏蔽,Ctrl+Esc,鍵,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《XP系統(tǒng)中屏蔽Ctrl+Esc鍵序列的方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于XP系統(tǒng)中屏蔽Ctrl+Esc鍵序列的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    人人精品人人爱| 国产日产欧美精品一区二区三区| 91视频.com| 日韩一区二区电影在线| 国产精品电影一区二区三区| 日韩av一二三| 91久久奴性调教| 自拍偷拍欧美激情| 粉嫩高潮美女一区二区三区| 91精品国产一区二区三区香蕉| 亚洲bt欧美bt精品| 欧美日韩免费一区二区三区 | 日韩免费看的电影| 奇米精品一区二区三区四区| 欧美电影在线免费观看| 午夜精品影院在线观看| 日韩精品一区二区三区蜜臀 | 亚洲人成精品久久久久久| 色综合久久久久久久久久久| 久久精品一区八戒影视| 成人av网在线| 最新国产精品久久精品| 91一区二区三区在线播放| 亚洲制服丝袜av| 4hu四虎永久在线影院成人| 国产乱对白刺激视频不卡| 国产精品卡一卡二卡三| 在线观看日韩精品| 看电视剧不卡顿的网站| 成人高清视频在线| 亚洲444eee在线观看| 国产日韩在线不卡| 欧美性猛交一区二区三区精品| 日韩在线a电影| 久久亚洲免费视频| 91黄色免费看| 国产精品综合av一区二区国产馆| 国产精品看片你懂得| 在线不卡欧美精品一区二区三区| 久久精品国产999大香线蕉| 国产日产欧美一区二区视频| 欧美日韩成人在线一区| 精品亚洲aⅴ乱码一区二区三区| 亚洲麻豆国产自偷在线| 日韩欧美中文字幕公布| 不卡av在线网| 国产激情精品久久久第一区二区| 亚洲女人小视频在线观看| 91麻豆精品国产自产在线观看一区| 国产**成人网毛片九色 | 国产午夜精品一区二区三区嫩草 | 91麻豆成人久久精品二区三区| 亚洲综合免费观看高清完整版在线 | 91网站在线观看视频| 亚洲二区在线观看| 久久精品亚洲一区二区三区浴池| 欧美精品日韩精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 久久久99精品久久| 日韩一本二本av| 日韩一区二区在线免费观看| 一本久久综合亚洲鲁鲁五月天| 国产美女视频一区| 麻豆精品在线播放| 亚洲123区在线观看| 亚洲大尺度视频在线观看| 亚洲免费观看高清完整版在线观看熊 | 97久久人人超碰| 成人在线视频一区| 国产一区 二区| 国产精品自在欧美一区| 国产原创一区二区三区| 久久国产视频网| 毛片av一区二区| 秋霞成人午夜伦在线观看| 日韩成人精品在线观看| 五月激情综合婷婷| 亚洲午夜免费福利视频| 男女视频一区二区| 精品国产欧美一区二区| 夜夜精品视频一区二区| 欧美影院精品一区| 成人激情小说乱人伦| 午夜在线电影亚洲一区| 一区二区三区精品久久久| 国产视频一区在线观看 | 久久久国产精品午夜一区ai换脸| 欧美中文字幕一区二区三区| 国产99精品视频| 国产91色综合久久免费分享| av高清不卡在线| 色哦色哦哦色天天综合| 欧美在线一区二区三区| 欧美一级视频精品观看| 精品粉嫩超白一线天av| 亚洲视频在线观看一区| 一个色妞综合视频在线观看| 亚洲一区二区三区四区在线免费观看 | 亚洲国产精品欧美一二99| 日本中文字幕一区二区视频 | 亚洲综合在线视频| 日韩成人dvd| 国模一区二区三区白浆| 北岛玲一区二区三区四区| 欧美日韩视频在线一区二区| 日韩视频一区二区在线观看| 国产偷国产偷精品高清尤物| 中文字幕欧美一区| 日韩av电影天堂| 91一区二区在线观看| 欧美美女一区二区| 欧美激情在线看| 首页国产欧美久久| 成人黄页在线观看| 制服丝袜亚洲色图| 亚洲视频网在线直播| 麻豆精品在线看| 色爱区综合激月婷婷| 欧美一区午夜精品| 一区二区高清在线| 成人国产精品免费网站| 日韩免费视频线观看| 一区二区三区中文在线观看| 国产一区二区三区免费在线观看| 欧美三级视频在线播放| 国产欧美综合在线| 蜜臀91精品一区二区三区| 色综合亚洲欧洲| 国产欧美日韩另类一区| 色噜噜偷拍精品综合在线| 亚洲国产精品成人久久综合一区| 亚洲国产成人tv| 91丨九色porny丨蝌蚪| 久久久久久久综合日本| 日欧美一区二区| 欧美日韩国产123区| 亚洲精选免费视频| 日韩国产欧美视频| 欧美一区二区视频在线观看2020| 亚洲精品视频自拍| 欧美亚洲国产bt| 亚洲激情中文1区| 色婷婷综合五月| 亚洲色图制服诱惑| 91女人视频在线观看| 亚洲天堂精品在线观看| 91猫先生在线| 亚洲国产一区在线观看| 欧美日韩一区 二区 三区 久久精品 | 欧美日韩性生活| 亚洲123区在线观看| 欧美高清www午色夜在线视频| 一级女性全黄久久生活片免费| 色拍拍在线精品视频8848| 亚洲乱码国产乱码精品精小说| 91性感美女视频| 午夜国产不卡在线观看视频| 8x福利精品第一导航| 久久精品国产秦先生| 久久嫩草精品久久久久| 国产一区二区在线影院| 国产亚洲精品精华液| 国产成人免费av在线| 亚洲免费av网站| 欧美日韩中文字幕一区| 美腿丝袜亚洲一区| 国产午夜久久久久| 色成年激情久久综合| 日韩电影在线看| 国产日韩精品视频一区| 99re这里只有精品视频首页| 亚洲精品国久久99热| 日韩欧美国产小视频| 不卡的av在线播放| 午夜激情一区二区三区| 欧美国产综合色视频| 欧美视频在线一区| 五月婷婷综合激情| 国产欧美精品一区二区三区四区| 91久久精品国产91性色tv| 蜜芽一区二区三区| 久久久精品黄色| 91精品国产综合久久香蕉麻豆| 国产黄色成人av| 天天色综合天天| 国产精品看片你懂得| 欧美一卡在线观看| 日本韩国精品在线| 国产自产2019最新不卡| 亚洲女与黑人做爰| 精品av久久707| 在线播放一区二区三区| 成人av免费在线播放| 激情都市一区二区| 午夜a成v人精品| 亚洲色图在线播放| 国产日韩av一区| 欧美成人vps| 欧美成人午夜电影| 欧美日韩性生活|