b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

如何通过GINA编程接口屏蔽Ctrl+Alt+Del的响应

电脑杂谈  发布时间:2021-05-29 07:00:38  来源:网络整理

如果你是基于Windows操作系统做系统集成,你可能希望你的最终产品独占系统资源。您希望标准化用户行为。例如,您不希望用户通过按 Ctrl+Alt+Del 来终止进程,或按 Win 键弹出开始菜单,

或按 Alt+Tab 组合键切换到另一个应用程序。作者有一篇相关文章《在Win2K/NT下阻止Ctrl+Alt+Del的响应》,介绍了如何通过GINA编程接口阻止Ctrl+Alt+Del的响应。作为延续,本文将继续介绍屏蔽Win键和Alt+Tab组合键的方法。

由于这些按钮的反应是系统级的,我们不可能简单地通过某个程序来控制它们。因此,我们需要使用 Microsoft-Hook 提供的另一个编程接口。你可能已经对钩子有了很好的了解(网上有很多关于钩子技术和应用的文章)。简单的说,钩子是一种通过替换系统提供的标准接口来拦截特定事件(消息)的技术,最终达到改变或增强系统默认行为的目的。我们现在的任务是在用户按下 Win 键或 Alt+Tab 组合键但系统没有响应之前拦截它们,然后更改系统的默认行为。很明显,我们需要做一个全局钩子(钩子函数在单独的DLL中实现),它是一个Low Level Keyboard hook。

第一步是实现hook DLL。我们首先要定义一个全局数据区(记住这是一个全局钩子),如下(放在cpp文件的顶部):

#pragma data_seg("mydata")

HHOOK glhHook = NULL; // 安装鼠标钩柄

HINSTANCE glhInstance = NULL; // DLL 实例句柄

#pragma data_seg()

然后在.def文件中声明这个数据区如下:

部分

我的数据读写共享

当这个DLL被某个进程加载时,程序从WinMain进入,此时我们需要保存模块句柄,如下:

键盘钩子_键盘钩子屏蔽键盘_鼠标键盘钩子

glhInstance = (HINSTANCE) hModule;

接下来,我们将定义两个导出函数和钩子处理函数。下面重点说一下这个钩子处理函数(另外两个导出函数比较简单,就是通过调用SetWindowsHookEx和UnhookWindowsHookEx来实现安装/卸载钩子函数;只要注意SetWindowsHookEx的第一个参数是WH_KEYBOARD_LL,第四个参数是0).

// 低级键盘钩子处理函数

LALL回调LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)

{

BOOL fEatKeystroke = FALSE;

PKBDLLHOOKSTRUCT p = NULL;

if (nCode == HC_ACTION)

{

p = (PKBDLLHOOKSTRUCT) lParam;

开关(wParam)

鼠标键盘钩子_键盘钩子屏蔽键盘_键盘钩子

{

案例 WM_KEYDOWN:

案例 WM_SYSKEYDOWN:

案例 WM_KEYUP:

案例 WM_SYSKEYUP:

fEatKeystroke = (p->vkCode == VK_LWIN) ¦ ¦ (p->vkCode == VK_RWIN) ¦ // 块赢

// 阻止 Alt+Tab

((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ¦

// 阻止 Alt+Esc

((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||

// 块 Ctrl+Esc

键盘钩子_键盘钩子屏蔽键盘_鼠标键盘钩子

((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));

中断;

默认:

中断;

}

}

return (fEatKeystroke? TRUE: CallNextHookEx(glhHook,nCode,wParam,lParam));

}

如您所见,当程序发现按下了 Win 键或 Alt+Tab 组合键时,它不会调用 CallNextHookEx 函数将消息向下传递。通过这种方式,我们已经能够阻止这些按钮的响应。

第二步是hook DLL 测试程序。在 VC 中创建一个基于对话框的应用程序。调用LoadLibrary("KeyMask.dll")加载钩子DLL,通过GetProcAddress(m_hDll,"StartKeyMask")和GetProcAddress(m_hDll,"StopKeyMask")导入两个安装/卸载钩子的函数。在主对话框上定义两个按钮以分别调用这两个函数,如下所示:

当按下“Start_Hook”按钮时,我们的钩子函数就起作用了。试试 Win 键,或者 Alt+Tab 组合键,它没有反应,对吧? ! “Stop_Hook”按钮可以移除这个钩子。

说到这里,你可能会觉得hook其实是很简单的东西。是的,钩子易于使用且功能强大。但是,我建议如果不是绝对必要,尽量少使用钩子。由于钩子实现了强大的功能,它们也可能会严重降低您的系统性能。有时候得不偿失!


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-378891-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...