求屏蔽系统功能键的程序,高分相送!! 现在要做一个工业监控系统,要在主机上屏蔽Alt+Tab,Ctrl+Alt+Del,Alt+Esc等键,目的是主机只能运行这一个软件(管理员要正常使用计算机),可以自己写代码,也可以找个成品的软件,请大家帮一下忙,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://hqtech.nease.net/Article/VC_WinAltTab.htm GINA DLL要输出下列函数(winlogon会调用)WlxActivateUserShellWlxDisplayLockedNoticeWlxDisplaySASNoticeWlxDisplayStatusMessageWlxGetStatusMessageWlxInitializeWlxIsLockOkWlxIsLogoffOkWlxLoggedOnSASWlxLoggedOutSASWlxLogoffWlxNegotiateWlxNetworkProviderLoadWlxRemoveStatusMessageWlxScreenSaverNotifyWlxShutdownWlxStartApplicationWlxWkstaLockedSAS为了简化编程,我们从MSGINA.DLL中动态获取上诉函数,在自定义的DLL中(以下称为NoReboot.DLL)中直接调用MSGINA.DLL的函数即可。现在我们要处理的就是WlxLoggedOnSAS函数:int WINAPI WlxLoggedOnSAS ( PVOID pWlxContext, DWORD dwSasType, PVOID pReserved) { HANDLE hMutex; WriteInfo("WlxLoggedOnSAS \r\n"); //用于记录信息 if (dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL){ //屏蔽CTRL_ALT_DEL,也可以根据特定条件来决定是否要屏蔽 //我采用了Mutex来控制是否屏蔽,(注意:要用unicode) hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"_ac952_z_cn_CTRL_ALT_DEL"); if (hMutex){ CloseHandle(hMutex); WriteInfo("disble CTRL+ALT+DEL \r\n"); return WLX_SAS_ACTION_NONE; //将屏幕切换到应用程序桌面,屏蔽掉CTRL+ALT+DEL } else WriteInfo("not disble CTRL+ALT+DEL \r\n"); } return prcWlxLoggedOnSAS ( //这是我从MSGINA.DLL中获取的函数。 pWlxContext, dwSasType, pReserved); }我们要在自己的程序中调用hMutex = CreateMutex(NULL, FALSE, "_ac952_z_cn_CTRL_ALT_DEL");就可屏蔽CTRL+ALT+DEL。2000 http://www.vckbase.com/document/viewdoc.asp?id=242XP 下http://www.vckbase.com/document/viewdoc.asp?id=424 在Windows 9x/Me系统中,屏蔽Ctrl+Alt+Del和各种任务开关键可以直接用BOOL bOldState;SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,TRUE,&bOldState,0);除了使用钩子,也可以写注册表http://www.vckbase.com/document/viewdoc/?id=424 Windows2000平台下混合编程屏蔽键盘事件 在一些应用场合,比如基于Windows2000(以下简称Win2K)下开发工控软件需要,为了增强系统安全性,需要对键盘事件进行监控、屏蔽。满足控制系统安全性要求。作为一个Win2K后台监控软件的编写,需要注意如下要点:HOOK(键盘挂钩函数),DLL,MsgINA.dll,Shell_NotifyIcon(托盘函数)。为了提高软件编写效率,可以采用混合编程方式,即采用VC++/ C++Bulider 6.0编写DLL文件,采用Visual Basic编写客户端程序。1 HOOK与DLL简介1) HOOKHOOK是一种反调函数。是Windows系统为应用程序提供用于监控系统各种事件消息的类中断程序。在系统消息机制里挂上用户自定义消息处理钩子(HOOK),达到对消息的过滤。Windows系统本身提供数个HOOK函数,为实现在Win2K/NT平台下的键盘屏蔽,要采用低级键盘HOOK,即WH_KEYBOARD_LL。此HOOK函数可以屏蔽Ctrl+Esc、Alt+Tab、和Alt+Esc等系统功能键,在WINNT SP3后的操作系统中都是支持的。设置HOOK需要用到SetWindowsHookEx()函数,在程序退出后,必须用UnhookWindowsHookEx()函数卸载掉HOOK。2) DLL与Msgina.dllDLL(动态链结库)是Microsoft Windows最重要组成之一。大多数与Windows相关程序,不是程式模块组模式,就是动态链结库模式。为实现对所有键盘事件的监控,必须将HOOK函数放在DLL文件中。Windows本身就是由许多的DLL组成的,它所有的库模块也都设计成DLL。在Win2K在,为了屏蔽Ctrl+Alt+Del组合键,必须了解Msgina.dll。在Win2K系统中,微软采用Winlogon和GINA-Graphical Identification and Authentication提供交互式登录支持。登录成功后,按下Ctrl+Alt+Del组合键,系统将通过Winlogon调用Msgina.dll内部函数WlxLoggedOnSAS。所以要屏蔽Ctrl+Alt+Del组合键,则可以写一个新的GINA.dll,其中提供接口调用Msgina.dll,从而实现屏蔽。3) Shell_NotifyIcon客户端程序应该运行在后台,所以可以将其最小化在系统托盘中。采用Shell_NotifyIcon API函数用来添加、删除、更改系统托盘区(taskbar status area)的图标。 2 程序实现在本文中,采用VC++6.开发系统GINA DLL, C++Bulider 6.0开发低层HOOK DLL,VB6.0开发客户端程序,实现混合编程。1) 自定义GINA编写因为自定义GINA编写资料较多,本文只简要介绍。自定义GINA可以采用VC++6.0开发。下面给出Windows2000 的Msgina内部函数表。表中函数将在自定义GINA中导入。函数名 说明 WlxActivateUserShell 激活用户外壳程序 WlxDisPlayLockedNotice 允许GINA dll显示锁定信息WlxDisPlaySASNotice 当没有用户登录时,winlogon调用此函数WlxDisPlayStatusMessage Winlogon用一个状态信息调用此函数进行显示WlxGetConsoleSwitchCredentials Winlogon调用此函数读取当前登录用户的信任信息,并透明的将它们传到目标会话WlxGetStatusMessage Winlogon调用此函数获取当前状态信息WlxIntialize 针对指定的窗口位置进行GINA dll初始化WlxIsLockOk 验证工作站正常锁定WlxIslogoffOk 验证注销正常WlxLoggedOnSAS 用户已登录并且工作站没有被加锁,若此时接收到SAS事件,则Winlogon调用此函数WlxLoggedOutSAS 没有用户登录,若此时接收到SAS事件,则Winlogon调用此函数WlxLogoff 请求注销操作时通知GINA dllWlxNegotiate 表示当前的winlogon版本是否能使用GINA dllWlxNetworkProviderLoad 在加载网络服务提供程序收集了身份和认证信息后,Winlogon调用此函数WlxRemoveStatusMessage Winlogon调用此函数告诉GINA dll停止显示状态信息WlxScreensaverNotify 允许GINA与屏幕保护操作交互WlxShutdown 在关闭之前Winlogon调用此函数,允许GINA实现任何关闭任务,例如从读卡器中退出智能卡WlxStartApplication 当系统需要在用户的上下文中启动应用程序时调用此函数WlxWkstalockedSAS 当工作站被锁定,如果接收到一个SAS,则Winlogon调用此函数 我们需要注意的是WlxLoggedOnSAS函数。屏蔽Ctrl+Alt+Del组合键代码将在调用该函数时添加。我们采用读取注册表键值来判断是否屏蔽,而该键值将在客户端程序中被操作。 http://www.vckbase.com/code/downcode.asp?id=1630 我写过一个dll,有实现以下功能的API函数可以调用,不知你要不要1.屏蔽系统键2.屏蔽Ctrl+Alt+Del, 模拟Ctrl+Alt+Del按下3.系统关机, 重起, 注销, 挂起4.关闭显示器5.隐藏桌面,隐藏任务栏6.锁定桌面,锁定任务栏7.运行屏保只支持Win2000以上的系统。需要的话联系我[email protected] RSA加密的问题,请教个位朋友 如何在Windows的文件属性加入自己的标签页? 任何判断子窗口被激活? 求助 如何获得word文档对象 要注销我的帐号了,请大家踊跃接分. 在NTFS中怎样才能让数据库对everyone可写? 100分请教,做聊天室时如何实现动态的背景? 简单实例,简单错误? 如何改变CRichEditView中选中文字的字体????? debug完全正确release却错误,怎么回事啊。。 请问int i=string.ReverseFind('.')返回i的含义是什么?
WlxActivateUserShell
WlxDisplayLockedNotice
WlxDisplaySASNotice
WlxDisplayStatusMessage
WlxGetStatusMessage
WlxInitialize
WlxIsLockOk
WlxIsLogoffOk
WlxLoggedOnSAS
WlxLoggedOutSAS
WlxLogoff
WlxNegotiate
WlxNetworkProviderLoad
WlxRemoveStatusMessage
WlxScreenSaverNotify
WlxShutdown
WlxStartApplication
WlxWkstaLockedSAS
为了简化编程,我们从MSGINA.DLL中动态获取上诉函数,在自定义的DLL中(以下称为NoReboot.DLL)中直接调用MSGINA.DLL
的函数即可。现在我们要处理的就是WlxLoggedOnSAS函数:
int WINAPI WlxLoggedOnSAS (
PVOID pWlxContext,
DWORD dwSasType,
PVOID pReserved)
{
HANDLE hMutex;
WriteInfo("WlxLoggedOnSAS \r\n"); //用于记录信息
if (dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL){ //屏蔽CTRL_ALT_DEL,也可以根据特定条件来决定是否要屏蔽
//我采用了Mutex来控制是否屏蔽,(注意:要用unicode)
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"_ac952_z_cn_CTRL_ALT_DEL");
if (hMutex){
CloseHandle(hMutex);
WriteInfo("disble CTRL+ALT+DEL \r\n");
return WLX_SAS_ACTION_NONE; //将屏幕切换到应用程序桌面,屏蔽掉CTRL+ALT+DEL
}
else
WriteInfo("not disble CTRL+ALT+DEL \r\n");
}
return prcWlxLoggedOnSAS ( //这是我从MSGINA.DLL中获取的函数。
pWlxContext,
dwSasType,
pReserved);
}我们要在自己的程序中调用hMutex = CreateMutex(NULL, FALSE, "_ac952_z_cn_CTRL_ALT_DEL");就可屏蔽CTRL+ALT+DEL。
2000 http://www.vckbase.com/document/viewdoc.asp?id=242
XP 下http://www.vckbase.com/document/viewdoc.asp?id=424
屏蔽Ctrl+Alt+Del和各种任务开关键可以直接用
BOOL bOldState;
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,TRUE,&bOldState,0);
除了使用钩子,也可以写注册表
http://www.vckbase.com/document/viewdoc/?id=424
在一些应用场合,比如基于Windows2000(以下简称Win2K)下开发工控软件需要,为了增强系统安全性,需要对键盘事件进行监控、屏蔽。满足控制系统安全性要求。作为一个Win2K后台监控软件的编写,需要注意如下要点:HOOK(键盘挂钩函数),DLL,MsgINA.dll,Shell_NotifyIcon(托盘函数)。为了提高软件编写效率,可以采用混合编程方式,即采用VC++/ C++Bulider 6.0编写DLL文件,采用Visual Basic编写客户端程序。
1 HOOK与DLL简介1) HOOK
HOOK是一种反调函数。是Windows系统为应用程序提供用于监控系统各种事件消息的类中断程序。在系统消息机制里挂上用户自定义消息处理钩子(HOOK),达到对消息的过滤。Windows系统本身提供数个HOOK函数,为实现在Win2K/NT平台下的键盘屏蔽,要采用低级键盘HOOK,即WH_KEYBOARD_LL。此HOOK函数可以屏蔽Ctrl+Esc、Alt+Tab、和Alt+Esc等系统功能键,在WINNT SP3后的操作系统中都是支持的。设置HOOK需要用到SetWindowsHookEx()函数,在程序退出后,必须用UnhookWindowsHookEx()函数卸载掉HOOK。2) DLL与Msgina.dll
DLL(动态链结库)是Microsoft Windows最重要组成之一。大多数与Windows相关程序,不是程式模块组模式,就是动态链结库模式。为实现对所有键盘事件的监控,必须将HOOK函数放在DLL文件中。Windows本身就是由许多的DLL组成的,它所有的库模块也都设计成DLL。在Win2K在,为了屏蔽Ctrl+Alt+Del组合键,必须了解Msgina.dll。在Win2K系统中,微软采用Winlogon和GINA-Graphical Identification and Authentication提供交互式登录支持。登录成功后,按下Ctrl+Alt+Del组合键,系统将通过Winlogon调用Msgina.dll内部函数WlxLoggedOnSAS。所以要屏蔽Ctrl+Alt+Del组合键,则可以写一个新的GINA.dll,其中提供接口调用Msgina.dll,从而实现屏蔽。3) Shell_NotifyIcon客户端程序应该运行在后台,所以可以将其最小化在系统托盘中。采用Shell_NotifyIcon API函数用来添加、删除、更改系统托盘区(taskbar status area)的图标。
在本文中,采用VC++6.开发系统GINA DLL, C++Bulider 6.0开发低层HOOK DLL,VB6.0开发客户端程序,实现混合编程。1) 自定义GINA编写因为自定义GINA编写资料较多,本文只简要介绍。自定义GINA可以采用VC++6.0开发。下面给出Windows2000 的Msgina内部函数表。表中函数将在自定义GINA中导入。函数名
说明
WlxActivateUserShell
激活用户外壳程序
WlxDisPlayLockedNotice
允许GINA dll显示锁定信息
WlxDisPlaySASNotice
当没有用户登录时,winlogon调用此函数
WlxDisPlayStatusMessage
Winlogon用一个状态信息调用此函数进行显示
WlxGetConsoleSwitchCredentials
Winlogon调用此函数读取当前登录用户的信任信息,并透明的将它们传到目标会话
WlxGetStatusMessage
Winlogon调用此函数获取当前状态信息
WlxIntialize
针对指定的窗口位置进行GINA dll初始化
WlxIsLockOk
验证工作站正常锁定
WlxIslogoffOk
验证注销正常
WlxLoggedOnSAS
用户已登录并且工作站没有被加锁,若此时接收到SAS事件,则Winlogon调用此函数
WlxLoggedOutSAS
没有用户登录,若此时接收到SAS事件,则Winlogon调用此函数
WlxLogoff
请求注销操作时通知GINA dll
WlxNegotiate
表示当前的winlogon版本是否能使用GINA dll
WlxNetworkProviderLoad
在加载网络服务提供程序收集了身份和认证信息后,Winlogon调用此函数
WlxRemoveStatusMessage
Winlogon调用此函数告诉GINA dll停止显示状态信息
WlxScreensaverNotify
允许GINA与屏幕保护操作交互
WlxShutdown
在关闭之前Winlogon调用此函数,允许GINA实现任何关闭任务,例如从读卡器中退出智能卡
WlxStartApplication
当系统需要在用户的上下文中启动应用程序时调用此函数
WlxWkstalockedSAS
当工作站被锁定,如果接收到一个SAS,则Winlogon调用此函数
我们需要注意的是WlxLoggedOnSAS函数。屏蔽Ctrl+Alt+Del组合键代码将在调用该函数时添加。我们采用读取注册表键值来判断是否屏蔽,而该键值将在客户端程序中被操作。
1.屏蔽系统键
2.屏蔽Ctrl+Alt+Del, 模拟Ctrl+Alt+Del按下
3.系统关机, 重起, 注销, 挂起
4.关闭显示器
5.隐藏桌面,隐藏任务栏
6.锁定桌面,锁定任务栏
7.运行屏保
只支持Win2000以上的系统。需要的话联系我[email protected]