标题随时锁定你的计算机
栏目软件世界
作者许开全
发布2001年19期
自从Win2000问世后,同宿舍的兄弟们便纷纷搭乘上了Win2000快车。而我却只能望尘莫及我的“老战友”硬件条件太差,享受不了Win2000的星级服务,特别当吃饭或有点小事要出去时,Win2000客户只须轻轻一按“Ctrl+Alt+Del”便扬长而去,回来后又只须轻轻一按便可Go On。而我却忧心忡忡的离去,胆战心惊的回来,因为一些重要的东西,若被“不知情”的旁观者不小心给点坏了,那麻烦可就大了,因而我试着自己编了个能随时锁定计算机的小程序,以便从软件上弥补“老战友”的硬件不足。
先把主要思想讲一下,希望大家能共同切磋,共同完善它。
本程序的关键是:用热键激活后台程序,程序中对热键消息WM_HOTKEY进行捕获,并通过消息参数了解哪个键被按下,从而将后台程序调至前台锁定计算机。
1.主窗体的设计
新建一基于对话框的工程取名Lock,其余选项保持默认方式,将取消按钮删掉,将确定按钮的Caption改为“进入”将Static Text的Caption改为“本机已被锁定,请单击进入按钮解除”,将窗体Styles属性中的Title Bar去掉。
2.口令窗体的设计
新引入一对话框,加入两个Static Text控件Caption分别为:“用户”和“口令”。在加入两个Edit控件,ID分别为:IDC_USER、IDC_PASSWORD,并将IDC_PASSWORD控件的Styles属性的PASSWORD选上;用ClassWizard为对话框新建一个类CPasswordDlg,分别为IDC_USER和IDC_PASSWORD设定CString类型的变量m_User和m_Password。
3.向系统登记热键和解出热键
CLockDlg::OnCreat()中写入:
RegisterHotKey (m_hWnd,1001,MOD_CONTROL|MOD_ALT,'L');//此处热键设为Ctrl+Alt+l。
ClockDlg::OnDestroy()中写入
UnregisterHotKey (m_hWnd,1001);//解除热键。
4.全屏显示和屏蔽“Ctrl+Alt+Del”等热键以及禁止关闭窗口
CLockDlg::OnInitDialog()中写入:
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,TRUE,NULL,0);//屏蔽热键“Ctrl+Alt+Del”等。
SetWindowPos (&wndTopMost,0,0,::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics (SM_CYSCREEN),SWP_SHOWWINDOW);//全屏显示。
CLockDlg::OnClose()中去掉CDialog::OnClose();//禁止用“Alt+F4”关闭窗口。
5.热键的处理
在ClockDlg中加入函数:LRESULT OnHotKey (WPARAM wParam,LPARAM lParam);并在ClockDlg.cpp中消息映射宏写入ON_MESSAGE(WM_HOTKEY,OnHotKey)
在CLockDlg::OnHotKey()中写入:
if(wParam==1001)
{
SystemParametersInfo (SPI_SETSCREENSAVERRUNNING,TRUE,NULL,0);
//屏蔽热键Ctrl+Alt+Del等。
SetForegroundWindow();//将后台程序调至前台从而锁定计算机。
ShowWindow(TRUE);
}
return 0;
6.解锁
在CLockDlg中加入CPasswordDlg类对象PasswordDlg,在CLockDlg(OnOK)中去掉CDialog(OnOK)并写入:
do
{
if(PasswordDlg.DoModal==IDOK)
{
if((PasswordDlg.m_User=="Administrator")&&(PasswordDlg.m_Password=="Password"))//此处用户设为“Administrator”,口令设为:"Password"。
{
AfxGetMainWnd()->ShowWindow(SW_HIDE);//将程序隐藏至后台。
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,FALSE,NULL,0);//解除“Ctrl+Alt+Del”等热键锁定。
break;
}
else//输入不正确。
MessageBox(“口令不正确,或是由于忘记将Caps Lock按下”,“警告”MB_OK|MB_ICONINFORMATION);
}
else
break;
}
while(1);
将程序修改一下,便可支持多用户,多口令,不再累赘。最后将程序加进注册表以便每次后台运行。试一试效果如何?(本程序在Vc6.0/Win98下通过)。