社区
C#
帖子详情
关于C#屏蔽alt+tab键的问题
Re_start
2008-06-11 02:33:23
因为做的是在线考试系统。
为了防止学生切换页面必须要屏蔽该键
但又不知功能怎么实现。
请指教
...全文
1418
8
打赏
收藏
关于C#屏蔽alt+tab键的问题
因为做的是在线考试系统。 为了防止学生切换页面必须要屏蔽该键 但又不知功能怎么实现。 请指教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
北京的雾霾天
2008-06-12
打赏
举报
回复
我想使用键盘Hook是可以解决问题的,不过在VS2005中不能直接使用Hook,你可以使用VC++编写一个DLL,把Hook代码使用C++来实现,并在DLL给出使用的公开方法在C#里调用就是了。
对于上面的截获消息的方法可能无效!
Janyue
2008-06-11
打赏
举报
回复
用js应该都可以实现的吧,ASII码值
dayizhixiaotutu
2008-06-11
打赏
举报
回复
或者按下Alt Tab组合键切换到别的应用程序。笔者已有相关一篇文章《Win2K/NT下屏蔽Ctrl Alt Del的响应》,介绍了如何通过GINA编程接口屏蔽Ctrl Alt Del的响应。作为续篇,本文将继续介绍屏蔽Win键和Alt Tab组合键的方法。
由于这些按键的响应是系统级的,我们不可能简单地通过某个程序来控制它们。因此,我们需要使用微软提供的另外一种编程接口——钩子(Hook)。大家可能已经对钩子很了解了(网上有很多介绍钩子技术和应用的文章)。简单来说,钩子是一种通过替换系统提供的标准接口来截获特定的事件(消息),最终达到改变或增强系统默认行为目的的技术。我们现在的任务,就是要在用户按下Win键或Alt Tab组合键、但系统还没有响应之前截获它们,然后改变系统的默认行为。很显然,我们要做一个全局钩子(钩子函数放在独立的DLL中实现),而且是个低级键盘钩子(Low Level Keyboard hook)。
字串2
第一步,钩子DLL的实现。我们首先要定义一个全局数据区(记住这是一个全局钩子),如下(放在cpp文件的上头):
#pragma data_seg("mydata")
HHOOK glhHook = NULL; // 安装的鼠标钩子句柄
HINSTANCE glhInstance = NULL; // DLL实例句柄
#pragma data_seg()
然后在.def文件中声明这个数据区,如下:
SECTIONS
mydata READ WRITE SHARED
当这个DLL被某个进程载入时,程序从WinMain进入,此时我们需要把模块句柄保存下来,如下:
glhInstance = (HINSTANCE) hModule;
接下去,我们就要定义两个导出函数,以及钩子的处理函数。我们重点看一下这个钩子处理函数(另外两个导出函数比较简单,只是通过调用SetWindowsHookEx和UnhookWindowsHookEx实现安装/卸载钩子函数;只需注重SetWindowsHookEx第一个参数为WH_KEYBOARD_LL,第四个参数为0)。
// 低级键盘钩子处理函数
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{ 字串3
BOOL fEatKeystroke = FALSE;
PKBDLLHOOKSTRUCT p = NULL;
if (nCode == HC_ACTION)
{
p = (PKBDLLHOOKSTRUCT) lParam;
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
fEatKeystroke = (p->vkCode == VK_LWIN) ¦ ¦ (p->vkCode == VK_RWIN) ¦ ¦ // 屏蔽Win
字串6
// 屏蔽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));
break;
default:
break;
}
}
return (fEatKeystroke ? TRUE : CallNextHookEx(glhHook,nCode,wParam,lParam));
}
大家可以看到,当程序发现按下的是Win键或者Alt Tab组合键,就不再调用CallNextHookEx函数将这个消息传递下去。以此,我们做到了屏蔽这些按键的响应。
第二步,钩子DLL的测试程序。在VC中创建一个基于对话框的应用程序。通过调用LoadLibrary("KeyMask.dll")载入钩子DLL,通过GetProcAddress(m_hDll,"StartKeyMask")和GetProcAddress(m_hDll,"StopKeyMask")导入两个安装/卸载钩子的函数。在主对话框上定义两个按钮分别调用这两个函数,如下: 字串8
当按下“Start_Hook”按钮,我们的钩子函数就起作用了。试一下Win键,或者Alt Tab组合键,没反应了吧?!“Stop_Hook”按钮可以解除这个钩子
Deathsign
2008-06-11
打赏
举报
回复
重载WndProc
查WIN32里面的消息代码,如果是键盘按键的代码截获并且干掉就行了(不给base处理就OK)···
ypacyhero
2008-06-11
打赏
举报
回复
要用注册表才行
jstxqgb
2008-06-11
打赏
举报
回复
这东西在页面用script 控制就行了,google一下立马出答案
yilanwuyu123
2008-06-11
打赏
举报
回复
http://zhidao.baidu.com/question/4863453.html?fr=qrl3
yilanwuyu123
2008-06-11
打赏
举报
回复
up mark
C#
锁屏程序(隐藏任务栏/
屏蔽
CRT+
ALT
+DEL快捷
键
)
C#
写的锁屏程序,可以隐藏WIN任务栏,
屏蔽
调用任务管理器(CRT+
ALT
+DEL快捷
键
),同时使用TIMER控件来监控程序,防止使用
ALT
+
TAB
快捷
键
调出其他应用程序,使其他程序位于锁屏程序之上
c#
屏蔽
键
盘热
键
看门狗程序,可
屏蔽
系统热
键
,ctrl+
alt
+del
alt
+f4
tab
+
alt
,根据上次退出看门狗时热
键
屏蔽
的状态来决定下次启动看门狗程序是否
屏蔽
热
键
键
盘按
键
禁用(ctrl+
alt
+del等)及USB禁用工具(2022.05||支持win10)
2022年最新实现
键
盘按
键
禁用:ctrl+
alt
+del,
Tab
,shift等
键
盘任意
键
禁用。 任务管理器禁用。 USB禁用工具。 win10有效。 使用
C#
实现
[源码]
C#
锁屏大师
屏蔽
键
盘 限制鼠标
[源码]
屏蔽
键
盘 限制鼠标
C#
锁屏大师程序
屏蔽
了: Win的所有组合
键
、
Alt
+F4、
Alt
+
Tab
、
Alt
+Esc、 Ctrl+Esc、Ctrl+Shift+Esc、 Ctrl+
Alt
+Dele以及F1-F12; 欢迎下载
C#
锁屏大师(Hook实现)
C#
锁屏大师:
(仅限Windows XP Professional用户使用 不支持服务器版,家庭版等)
前阵子上传了一个叫做\"
C#
版 挂机锁程序\" Hook技术
屏蔽
键
盘
这个已经被本人检测到bug了 且已经修正 得到现在的这个
程序
屏蔽
了:
Win的所有组合
键
、
Alt
+F4、
Alt
+
Tab
、
Alt
+Esc、Ctrl+Esc、Ctrl+Shift+Esc、Ctrl+
Alt
+Dele以及F1-F12;
XP下测试通过 2003和Vista下未做测试 欢迎下载
C#
110,024
社区成员
642,597
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章