社区
C#
帖子详情
关于C#屏蔽alt+tab键的问题
Re_start
2008-06-11 02:33:23
因为做的是在线考试系统。
为了防止学生切换页面必须要屏蔽该键
但又不知功能怎么实现。
请指教
...全文
1678
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
低级
键
盘钩子
屏蔽
Win
键
、
Alt
+
Tab
键
的响应
本文介绍如何使用低级
键
盘钩子(Low Level Keyboard hook)在Windows系统中
屏蔽
Win
键
、
Alt
+
Tab
及
Alt
+Esc等系统级快捷
键
的响应,以控制用户行为并独占系统资源。
C#
WinForm中
屏蔽
特殊功能
键
的技术实现
本文围绕在
C#
WinForm应用程序中
屏蔽
和释放Windows系统特殊功能
键
展开。介绍了
屏蔽
Win
键
、
Alt
+F4的方法,涉及钩子函数使用、
键
盘事件处理等技术。还阐述了释放按
键
的机制与方法,同时强调要平衡特殊
键
屏蔽
与用户体验的关系。
Windows XP系统中如何
屏蔽
Ctrl+
Alt
+Del、
Alt
+
Tab
以及Ctrl+Esc
键
序列
本文详细介绍了在Windows XP系统中如何
屏蔽
Ctrl+
Alt
+Del、
Alt
+
Tab
以及Ctrl+Esc
键
序列的方法。通过编写新的Gina.dll或
键
盘驱动程序,以及使用操作系统的策略设置,可以实现对这些组合
键
的
屏蔽
。同时,提供了
屏蔽
任务栏的具体方法,并集成了多个功能的示例程序TrapKeys.exe。
屏蔽
组合
键
通过设置低级
键
盘钩子函数LowLevelKeyboardProc,可以在Windows系统中
屏蔽
Ctrl+Esc、
Alt
+Esc、
Alt
+
Tab
及Num Lock等特定
键
盘组合
键
。在实现过程中,当检测到这些组合
键
按下时,钩子函数会返回TRUE阻止其默认行为。然而,有报告指出某些应用程序如HyperSnap的快捷
键
在
屏蔽
功能下仍可正常使用,尤其是在Release版本中可能会遇到
问题
,需要进一步调试和优化。
C#
HOOK钩子
屏蔽
键
盘代码
本文详细介绍了使用
C#
基于HOOK技术
屏蔽
特定
键
盘快捷
键
的方法,包括安装和卸载线程及全局钩子,监听并处理如Ctrl+Esc、
Alt
+Esc、
alt
+f4等
键
盘事件。
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章