如何实现系统级的对话框,并屏蔽系统热键(如Ctrl+alt+del.Alt+Tab),即让该对话框运行后,非要通过该对话框才能回到WINDOWS,起到锁屏的

chief 2000-01-29 01:28:00
...全文
254 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SCUM 2000-09-03
  • 打赏
  • 举报
回复
试过 SC_CLOSE SC_EXIT 消息吗?
就像 C++ Builder 中的 OnCLoseQuery 一样,只要不正常返回,就不会关闭窗口了。
大潘@南京 2000-01-30
  • 打赏
  • 举报
回复
实现系统级的对话框主要在于
1。屏蔽ALT+TAB的切换
2。屏蔽鼠标在该窗口之外的活动
3。屏蔽系统级的Ctrl+Alt+Del

其中第一点在9x和NT下都可以实现,95/98可以通过wm_syskeydown来截获ALT,NT下需要用钩子函数Lowlevelkeyproc来截获ALT。
第二点可以用CLIPMOUSE来实现限制鼠标的活动,不过这样看上去有点怪,因此最好用全屏
第三点在95/98下可以用SYSTEMPARAMETERSINFO来禁止,不过在NT下却不可能。

yb 2000-01-30
  • 打赏
  • 举报
回复
以下代码可以避免Esc及Alt+F4退出Dialog,但不能屏蔽掉Ctrl+Alt+Del

BOOL CSelfDlg::PreTranslateMessage(MSG* pMsg)
{
if( (GetKeyState(VK_ESCAPE)&0x8000) and and (GetKeyState(VK_MENU)&0x8000) )
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
Over 2000-01-29
  • 打赏
  • 举报
回复
typedef DWORD (CALLBACK* LPFNDLLFUNC)(DWORD,DWORD);

void ShowHideInTaskMang()
{
HINSTANCE hDLL;
LPFNDLLFUNC lpfnDllFunc;
// DWORD dwParam1,dwParam2;
DWORD uReturnVal;
hDLL = LoadLibrary("kernel32");
if (hDLL != NULL)
{
lpfnDllFunc = (LPFNDLLFUNC)GetProcAddress(hDLL,"RegisterServiceProcess");
if (!lpfnDllFunc)
{
FreeLibrary(hDLL);
}
else
{
uReturnVal = lpfnDllFunc(NULL, 1); // call RegisterServiceProcess with (NULL, 1) to hide application in task manager
}
}
FreeLibrary(hDLL);
}
above this can hide/show TaskMagament

SystemParametersInfo(SPI_SCREENSAVERRUNNING,TRUE,NULL,0);

this can prevent C+A+D;(win9x)

钩子在(win9x)下应该是截获不到的。如果你需要,俺可以给你一个范例
Over 2000-01-29
  • 打赏
  • 举报
回复
typedef DWORD (CALLBACK* LPFNDLLFUNC)(DWORD,DWORD);

void ShowHideInTaskMang()
{
HINSTANCE hDLL;
LPFNDLLFUNC lpfnDllFunc;
// DWORD dwParam1,dwParam2;
DWORD uReturnVal;
hDLL = LoadLibrary("kernel32");
if (hDLL != NULL)
{
lpfnDllFunc = (LPFNDLLFUNC)GetProcAddress(hDLL,"RegisterServiceProcess");
if (!lpfnDllFunc)
{
FreeLibrary(hDLL);
}
else
{
uReturnVal = lpfnDllFunc(NULL, 1); // call RegisterServiceProcess with (NULL, 1) to hide application in task manager
}
}
FreeLibrary(hDLL);
}
above this can hide/show TaskMagament

SystemParametersInfo(SPI_SCREENSAVERRUNNING,TRUE,NULL,0);

this can prevent C+A+D;(win9x)
sean 2000-01-29
  • 打赏
  • 举报
回复
·我VC6在Windows98中试过,是可以的。
·而且可以屏蔽ALT+ESC、ALT+TAB
·可惜不能屏蔽ALT+F4和ESC等!
·其他高手若能解决,不妨也告诉我一声!
ToniHoo 2000-01-29
  • 打赏
  • 举报
回复
Over你好! 我的SystemParametersInfo, ShowHideInTaskMang
还不行望给个实列,MY EMail: toninet@yeah.net 多谢!
ToniHoo 2000-01-29
  • 打赏
  • 举报
回复
我试了试SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,NULL,0),
始终不行,编译SUCCESS,运行无效。OS 为WIN98,编译器用BC5.02 和 VC6。
再请问一下,如果用钩子截获ALT+CTRL+DEL 消息,
代码该如何写。请多多指教。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧