社区
C#
帖子详情
关于C#屏蔽alt+tab键的问题
Re_start
2008-06-11 02:33:23
因为做的是在线考试系统。
为了防止学生切换页面必须要屏蔽该键
但又不知功能怎么实现。
请指教
...全文
1594
8
打赏
收藏
关于C#屏蔽alt+tab键的问题
因为做的是在线考试系统。 为了防止学生切换页面必须要屏蔽该键 但又不知功能怎么实现。 请指教
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
windows下
c#
屏蔽
系统atrl+
alt
+delete组合
键
基于
c#
的
屏蔽
系统按
键
,使用于锁屏,广播等控制类软件,win10,win7下同样适用,
Windows XP系统中
屏蔽
Ctrl+
Alt
+Del、
Alt
+
Tab
以及Ctrl+Esc
键
序列
Windows XP系统中
屏蔽
Ctrl+
Alt
+Del、
Alt
+
Tab
以及Ctrl+Esc
键
序列
C#
写出的挂机锁,
屏蔽
任务管理器,
屏蔽
Alt
+F4
C#
写出的挂机锁,
屏蔽
任务管理器,
屏蔽
Alt
+F4
C#
利用钩子
屏蔽
ctrl+
alt
+delete
键
盘按钮
C#
屏蔽
键
盘,利用HOOK钩子
屏蔽
键
盘上的 ctrl+
alt
+delete组合
键
按钮,源码可直接编译,编译运行截图如图所示,程序在
屏蔽
指定按钮后可以解除
屏蔽
。 运行环境:Visual Studio2010
C#
锁屏程序(隐藏任务栏/
屏蔽
CRT+
ALT
+DEL快捷
键
)
C#
写的锁屏程序,可以隐藏WIN任务栏,
屏蔽
调用任务管理器(CRT+
ALT
+DEL快捷
键
),同时使用TIMER控件来监控程序,防止使用
ALT
+
TAB
快捷
键
调出其他应用程序,使其他程序位于锁屏程序之上
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章