随时锁定你的计算机 许开全 2001年 19期 自从Win2000问世后,同宿舍的兄弟们便纷纷搭乘上了Win2000快车。而我却只能望尘莫及我的“老战友”硬件条件太差,享受不了Win2000的星级服务,特别当吃饭或有点小事要出去时,Win2000客户只须轻轻一按“Ctrl+Alt+Del”便扬长而去,回来后又只须轻轻一按便可Go On。而我却忧心忡忡的离去,胆战心惊的回来,因为一些重要的东西,若被“不知情”的旁观者不小心给点坏了,那麻烦可就大了,因而我试着自己编了个能随时锁定计算机的小程序,以便从软件上弥补“老战友”的硬件不足。   先把主要思想讲一下,希望大家能共同切磋,共同完善它。   本程序的关键是:用热键激活后台程序,程序中对热键消息WM_HOTKEY进行捕获,并通过消息参数了解哪个键被按下,从而将后台程序调至前台锁定计算机。   #21.主窗体的设计   新建一基于对话框的工程取名Lock,其余选项保持默认方式,将取消按钮删掉,将确定按钮的Caption改为“进入”将Static Text的Caption改为“本机已被锁定,请单击进入按钮解除”,将窗体Styles属性中的Title Bar去掉。   #2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。   #23.向系统登记热键和解出热键   CLockDlg::OnCreat()中写入:   RegisterHotKey (m_hWnd,1001,MOD_CONTROL|MOD_ALT,'L');//此处热键设为Ctrl+Alt+l。   ClockDlg::OnDestroy()中写入   UnregisterHotKey (m_hWnd,1001);//解除热键。   #2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”关闭窗口。   #2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;   #2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下通过)。