CTaskKeyHookDll类: 公共CWinApp {
公开
:
CTaskKeyHookDll(){}
〜CTaskKeyHookDll(){}
} MyDll;
///////////////////////////////////////////////// // /
//以下代码指示此DLL的所有实例之间共享该部分
//低级键盘挂钩必须是系统级挂钩
//
#pragma data_seg(“. mydata”)
HHOOK g_hHookKbdLL = NULL; //挂钩句柄
BOOLg_bBeep = FALSE; //按下非法键时会发出哔哔声
#pragma data_seg()
#pragma注释(链接器,“ / SECTION: .mydata,RWS”)//告诉链接器: 创建数据共享部分
///////////////////////////////////
//低级键盘挂钩
//拦截任务转换键: 不通过直接返回
//
LALLULT CALLBACKMyTaskKeyHookLL(整数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->标志和LLKHF_ALTDOWN)||
// Alt + Esc
(pkh-> vkCode == VK_ESCAPE && pkh->标志和LLKHF_ALTDOWN)||
(pkh-> vkCode == VK_LWIN || pkh-> vkCode == VK_RWIN)){//开始菜单
if(g_bBeep &&(wp == WM_SYSKEYDOWN || wp == WM_KEYDOWN))
MessageBeep(0); //哔哔声
返回1; //不再传递给CallNextHookEx,直接返回
}
}
返回CallNextHookEx(g_hHookKbdLL,nCode,wp,lp);
}
![]()
///////////////////////////////////////////////// // /
//任务键序列是否被锁定-即是否已安装键盘钩?
//注意: 这里假设没有其他钩子做同样的事情
//
DLLEXPORT BOOLAreTaskKeysDisabled()
{
返回g_hHookKbdLL! = NULL;
}
///////////////////////////////////////////////// // /
// Shield任务键: 安装低级键盘结构
//返回该标志当前是否被阻止(TRUE / FALSE)
//
DLLEXPORT BOOLDisableTaskKeys(BOOL bDisable,BOOL bBeep)
{
如果(bDisable){
if(!g_hHookKbdLL){
g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD_LL,
MyTaskKeyHookLL,MyDll.m_hInstance,0);
}
}否则,如果(g_hHookKbdLL!= NULL){
UnhookWindowsHookEx(g_hHookKbdLL);
g_hHookKbdLL = NULL;
}
g_bBeep = bBeep;
返回AreTaskKeysDisabled();
}
TaskKeyHook输出两个函数: DisableTaskKeys和AreTaskKeysDisabled. 前者安装WH_KEYBOARD_LL挂钩;后者确定挂钩是否已安装. 这个键盘挂钩的处理思路是拦截Alt + Tab,Ctrl + Esc,Alt + Esc和Windows键VK_LWIN / VK_RWIN. 稍后将详细描述这两个键. 当钩子击中这些键时,它将直接返回给调用者,而不是将处理传递给CallNextHookEx.
LALLULT CALLBACKMyTaskKeyHookLL(...)
{
如果(/ *任务键*)
返回1; //立即返回
返回CallNextHookEx(...);
}
大多数TaskKeyHook的实现非常简单. 在一个地方只有一个小技巧: 使用#pragma data_seg命名包含整个数据的数据段,并使用#pragma注释(链接器...)告诉链接器将该数据段作为共享段. 有关实现的详细信息,请参考源代码. 本文附带的示例程序(TrapKeys.exe)汇集了上述用于屏蔽键盘按键序列的功能. 此外,它还具有禁用任务栏的功能. 通常xp屏蔽win键,由于禁用了任务转换键,因此也必须禁用任务栏,否则禁用任务转换键是没有意义的. 禁用任务栏的具体方法如下:
HWND hwnd = FindWindow(“ Shell_traywnd”,NULL); //查找任务栏
EnableWindow(hwnd,FALSE); //禁用任务栏
图4是示例程序运行屏幕:
如何在XP系统'/>中阻止Ctrl + Alt + Del,Alt + Tab和Ctrl + Esc键序列
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-179913-2.html
1依然没有躲过淘汰的命运