花了兩天的時(shí)間,終于將其“覺(jué)醒”成功。嘎嘎~~~ 當(dāng)設(shè)計(jì)1.0 版本的 沒(méi)有密碼驗(yàn)證,心里就一直覺(jué)得很不舒服。覺(jué)得它不是一個(gè)完整的程序,雖然可以鎖定鍵盤(pán)、鼠標(biāo)、屏幕...但卻連最基本的密碼驗(yàn)證都沒(méi)有。這樣的防御形同虛設(shè),那時(shí)夠糾結(jié)的...現(xiàn)在就看看完善之后的 V2.0 界面吧~~ 感覺(jué)舒服多了~~~嘎嘎...先不說(shuō)它的功能強(qiáng)不強(qiáng)悍 至少它的功能完整的~~
設(shè)置界面:
鎖屏界面:
實(shí)現(xiàn)原理: 利用HOOK 鉤子使鍵盤(pán)失效,利用ClipCursor(&rect); 函數(shù)限制鼠標(biāo)移動(dòng)的位置,屏蔽一些系統(tǒng)快捷鍵是通過(guò)修改注冊(cè)表實(shí)現(xiàn)的。 WIN鍵是通過(guò)結(jié)束 explorer.exe 的進(jìn)程實(shí)現(xiàn)屏蔽。同時(shí)由于explorer.exe 進(jìn)程的結(jié)束,也激活了注冊(cè)表的相關(guān)鍵值生效。 鎖定時(shí)所顯示的那張圖其實(shí)是一個(gè)隨屏幕大小而改變的對(duì)話框。對(duì)話框中加入了一個(gè)圖片控件而已。 然后將利用SetWindowPos(&wndTopMost,0,0,w,h,SWP_SHOWWINDOW);將其置頂。
功能: 鎖定【鼠標(biāo)移動(dòng)】、 屏蔽【鍵盤(pán)輸入】、屏蔽【注銷(xiāo)按鈕】、屏蔽【關(guān)機(jī)按鈕】、 屏蔽【更改密碼】、屏蔽【任務(wù)管理器】、屏蔽【鎖定計(jì)算機(jī)】、屏蔽【系統(tǒng)快捷鍵】 鎖屏?xí)r程序會(huì)設(shè)定開(kāi)機(jī)自啟動(dòng),解屏?xí)r刪除開(kāi)機(jī)自啟動(dòng),達(dá)到未輸入解屏密碼時(shí),即使重啟之后程序仍會(huì)鎖屏! 程序附帶自校驗(yàn),在一定的程度上防范惡意修改及病毒感染。
缺點(diǎn): 依靠第三方實(shí)現(xiàn)部分功能,不能自己實(shí)現(xiàn)...
密碼保存是以明文的形式保存,加密算法的缺陷,導(dǎo)致加密后程序可能會(huì)在某些機(jī)器上出錯(cuò)。 而且由于使用了HOOK技術(shù)導(dǎo)致某些不負(fù)責(zé)任的安全軟件誤報(bào)為病毒程序.。這很大部分上影響用戶的使用。 沒(méi)有使用資源釋放機(jī)制,是因?yàn)榕掠脩粽`會(huì)本是DLL木馬。所以導(dǎo)致多了一個(gè) HookDll.dll 的文件出現(xiàn)。 由于對(duì)MFC不太熟悉,所以密碼驗(yàn)證方面的代碼寫(xiě)的有點(diǎn)復(fù)雜...雖然這是個(gè)小程序,如果是中大型的程序在一定的程度下影響效率。 代碼還是不夠精悍!某些函數(shù)定義下顯得不夠規(guī)范。. 不能自定義圖像和其顯示的透明度。
以下是 HookDll.dll 源碼: - =========================================================================================================
- #include <windows.h>
- #include <stdio.h>
- #include <TLHELP32.H>
- #pragma comment(linker, "/OPT:NOWIN98")
- #include <shlwapi.h>// 刪除子鍵需要
- #pragma comment(lib, "shlwapi.lib")
- HHOOK g_hMouse;
- HHOOK g_hMouse1;
- #pragma data_seg("MySec")
- HWND g_hand = NULL;
- #pragma data_seg()
- #pragma comment(linker,"/section:MySec,RWS")
- void UnhHook();
- int Reg(int i);// 限制任務(wù)管理器
- DWORD Pid;// 當(dāng)前進(jìn)程pid
- DWORD WPid;// 激活窗口的pid
- DWORD Process(char Processname[]); // 遍歷進(jìn)程
- int AUTODel(int Del)
- {
- char Key[]="鎖屏小工具";
- HKEY RegKey;
- if (Del)
- {
- if(RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
- 0, KEY_ALL_ACCESS, &RegKey) != ERROR_SUCCESS)
- return 1;
- if (!RegDeleteValue(RegKey,Key))
- {
- RegCloseKey(RegKey);
- return 1;
- }
- }
- else
- {
- if(RegOpenKeyEx(HKEY_CURRENT_USER, "密碼正確",0, KEY_ALL_ACCESS, &RegKey) == ERROR_SUCCESS)
- {
- SHDeleteKey(HKEY_CURRENT_USER,"密碼正確");
- SHDeleteKey(HKEY_CURRENT_USER,"開(kāi)機(jī)啟動(dòng)");
- RegCloseKey(RegKey);
- return 0;
- }
- else
- return 1;
- }
- RegCloseKey(RegKey);
- return 0;
- }
- void CALLBACK PasswordCmp(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
- {
- if (!AUTODel(0))
- {
- if (!AUTODel(1))
- MessageBox(0,"刪除自啟動(dòng)失!重啟后可能還會(huì)被鎖屏,請(qǐng)用安全工具清除本開(kāi)機(jī)啟動(dòng)項(xiàng)!","注意",MB_OK|MB_SYSTEMMODAL);
- KillTimer(hWnd,1);// 結(jié)束定時(shí)
- if (Reg(0))
- MessageBox(0,"解除對(duì)windows 安全限制失敗~~~請(qǐng)解除安全軟件對(duì)本軟件的攔截!解除攔截后再重新鎖屏后解鎖即可~~","Error",MB_SYSTEMMODAL);
- SendMessage(g_hand,WM_CLOSE,0,0); // 關(guān)閉窗口
- UnhHook();
- }
- }
- LRESULT CALLBACK MouseProc(
- int nCode, // hook code
- WPARAM wParam, // message identifier
- LPARAM lParam // mouse coordinates
- )
- {
- return 1;
- }
- LRESULT CALLBACK KeyboardProc(
- int code, // hook code
- WPARAM wParam, // virtual-key code
- LPARAM lParam // keystroke-message information
- )
- {
- /*//調(diào)試程序時(shí)使用
- if (VK_F2== wParam)
- {
- SendMessage(g_hand,WM_CLOSE,0,0);
- UnhHook();
- if (!AUTODel(1))
- MessageBox(0,"刪除自啟動(dòng)失。≈貑⒑罂赡苓會(huì)被鎖屏,請(qǐng)用安全工具清除本開(kāi)機(jī)啟動(dòng)項(xiàng)!","注意",MB_OK|MB_SYSTEMMODAL);
- if (Reg(0))
- MessageBox(0,"解除對(duì)windows 安全限制失敗~~~請(qǐng)解除安全軟件對(duì)本軟件的攔截!解除攔截后再重新鎖屏后解鎖即可~~","Error",MB_SYSTEMMODAL);
- }
- */
- // 獲取當(dāng)前激活窗口的進(jìn)程PID
- GetWindowThreadProcessId(GetActiveWindow(), &WPid);
- // 與自身比較
- /* VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
- * 0x40 : unassigned
- * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
- *小鍵盤(pán) 0 - 9 (0x60 - 0x69)
- *13 回車(chē)鍵 || 8 退格鍵*/
- if (WPid == Pid) // 如果當(dāng)前屬于窗口是本進(jìn)程 則不屏蔽這些按鍵
- {
- if (wParam >= 0x30 && wParam <=0x5A || wParam >= 0x60 && wParam <= 0x69 || wParam == 13 || wParam == 8)
- {
- if (wParam != 0x40)
- {
- return CallNextHookEx(g_hMouse1, code, wParam, lParam) ;
- }
- }
- }
- return 1;
- }
- void SetHook(HWND hwnd)
- {
- GetWindowThreadProcessId(hwnd, &Pid);
- g_hand=hwnd;// 還是不HOOK 鼠標(biāo)吧 會(huì)有忙狀態(tài)~~~
- //g_hMouse = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("HookDll"),0);
- g_hMouse1 = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("HookDll"),0);
- DWORD ProcessID = Process("explorer.exe");
- HANDLE Proceshandle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);
- TerminateProcess(Proceshandle ,1);
- SetTimer(hwnd,1,1,PasswordCmp);// 設(shè)置定時(shí)器
- if (Reg(1))
- {
- MessageBox(0,"注意!無(wú)法限制windows 安全,請(qǐng)解除安全軟件對(duì)本軟件的限制~","Error",MB_SYSTEMMODAL);
- }
- }
- void UnhHook()
- {
- //UnhookWindowsHookEx(g_hMouse);
- UnhookWindowsHookEx(g_hMouse1);
- //ClipCursor(NULL); //釋放
- ShellExecute(NULL,"open","explorer.exe",NULL,NULL,SW_SHOW);
- }
- int Reg(int i)
- {
- char Reg[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";
- char Regoff[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
- char Regz[] = "DisableTaskMgr";// 屏蔽任務(wù)管理器
- char RegLock[] = "DisableLockWorkstation";// 屏蔽鎖定計(jì)算機(jī)
- char Regnooff[] = "NoLogOff";// 屏蔽注銷(xiāo)
- char Regnoexit[] = "NoClose";// 屏蔽關(guān)機(jī)
- char RegnoKey[] = "NoWinKeys";// WIN+E、WIN+D、WIN+F、WIN+R等Windows快捷鍵
- //char RegnoRun[] = "RestrictRun";// 禁止允許任何程序
- char Nopassword[] = "DisableChangePassword";// 屏蔽更改密碼
- HKEY hkey,hkeyoff;
- DWORD Zhi=1;
- //if(RegCreateKeyEx(HKEY_CURRENT_USER,Reg,NULL,KEY_ALL_ACCESS ,&hkey))
- if(RegCreateKeyEx(HKEY_CURRENT_USER,Reg,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hkey,NULL))
- {
- RegCloseKey(hkey);
- return 1;// 創(chuàng)建失敗則 返回1 提示錯(cuò)誤
- }
- //if(RegCreateKeyEx(HKEY_CURRENT_USER,Regoff,NULL,KEY_ALL_ACCESS ,&hkeyoff))
- if(RegCreateKeyEx(HKEY_CURRENT_USER,Regoff,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hkeyoff,NULL))
- {
- RegCloseKey(hkeyoff);
- return 1;// 創(chuàng)建失敗則 返回1 提示錯(cuò)誤
- }
- if (i)
- {
- // 屏蔽任務(wù)管理器
- if (RegSetValueEx(hkey,Regz,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))
- {
- RegCloseKey(hkey);
- return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤
- }
- // 屏蔽鎖定計(jì)算機(jī)
- if (RegSetValueEx(hkey,RegLock,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))
- {
- RegCloseKey(hkey);
- return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤
- }
- // 屏蔽注銷(xiāo)
- if (RegSetValueEx(hkeyoff,Regnooff,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))
- {
- RegCloseKey(hkeyoff);
- return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤
- }
- // 屏蔽關(guān)機(jī)
- if (RegSetValueEx(hkeyoff,Regnoexit,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))
- {
- RegCloseKey(hkeyoff);
- return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤
- }
- // 屏蔽更改密碼
- if (RegSetValueEx(hkey,Nopassword,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))
- {
- RegCloseKey(hkey);
- return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤
- }
- // 屏蔽系統(tǒng)快捷鍵
- if (RegSetValueEx(hkeyoff,RegnoKey,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))
- {
- RegCloseKey(hkeyoff);
- return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤
- }
- RegCloseKey(hkeyoff);
- RegCloseKey(hkey);
- /*// 只修改內(nèi)存 重啟后會(huì)失效 避免重啟后鎖屏程序無(wú)法運(yùn)行
- if(RegCreateKeyEx(HKEY_CURRENT_USER,Regoff,0,0,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&hkeyoff,NULL))
- {
- RegCloseKey(hkeyoff);
- return 1;// 創(chuàng)建失敗則 返回1 提示錯(cuò)誤
- }
- if (RegSetValueEx(hkeyoff,RegnoRun,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))
- {
- RegCloseKey(hkeyoff);
- return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤
- }
- RegCloseKey(hkeyoff);
- */return 0;// 如果找到則返回0 提示成功
- }
- else// 解除限制
- {
- // 解除任務(wù)管理器限制
- if (RegDeleteValue(hkey,Regz))
- return 1;
- // 解除鎖定計(jì)算機(jī)限制
- if (RegDeleteValue(hkey,RegLock))
- return 1;
- // 解除鎖定注銷(xiāo)
- if (RegDeleteValue(hkeyoff,Regnooff))
- return 1;
- // 解除鎖定注銷(xiāo)
- if (RegDeleteValue(hkey,Nopassword))
- return 1;
- // 解除鎖定關(guān)機(jī)
- if (RegDeleteValue(hkeyoff,Regnoexit))
- return 1;
- // 解除系統(tǒng)快捷鍵限制
- if (RegDeleteValue(hkeyoff,RegnoKey))
- return 1;
- /*// 解除允許程序的權(quán)限
- if (RegDeleteValue(hkeyoff,RegnoRun))
- return 1;
- */return 0;
- }
- }
- DWORD Process(char Processname[])
- {
- PROCESSENTRY32 ProcessEnt = {0};
- HANDLE hPrOhandle;
- ProcessEnt.dwSize = sizeof(PROCESSENTRY32);
- hPrOhandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- BOOL bRet = Process32First(hPrOhandle,&ProcessEnt);
- while (bRet)
- {
- if (strcmpi(Processname,ProcessEnt.szExeFile) == 0)
- {
- return ProcessEnt.th32ProcessID;
- }
- bRet = Process32Next(hPrOhandle,&ProcessEnt);
- }
- return 1;
- }
- 以下是 鎖定小工具 V2.0.exe 源碼:(由于是MFC設(shè)計(jì)的界面 代碼無(wú)法全部給出 只給出關(guān)鍵的代碼)
- =========================================================================================================
- 定義兩個(gè)全局變量
- HWND g_hwnd; // 傳遞給DLL用的
- int LockTime = 3;// 輸入密碼錯(cuò)誤三次 則凍結(jié) 3 分鐘
- 程序加載時(shí):BOOL CMyDlg::OnInitDialog()
- HKEY RegKey;
- if(RegOpenKeyEx(HKEY_CURRENT_USER, "開(kāi)機(jī)啟動(dòng)",0, KEY_ALL_ACCESS, &RegKey) != ERROR_SUCCESS)
- {
- CLock dlg;
- dlg.DoModal(); // 創(chuàng)建 設(shè)置 子窗口界面
- }
- else // 否則直接鎖屏
- RegCloseKey(RegKey);
- g_hwnd = m_hWnd; // 將本窗口的句柄傳遞給DLL
- // 創(chuàng)建線程 進(jìn)行HOOK
- CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)HOOK,NULL,NULL,NULL);
- DWORD WINAPI HOOK()
- {// 去掉鼠標(biāo)忙狀態(tài)
- GetInputState();
- PostThreadMessage(GetCurrentThreadId(),NULL,0,0);
- MSGmsg;
- GetMessage(&msg, NULL, NULL, NULL);
- SetHook(g_hwnd); // HOOK
- RECT rect; //定義個(gè)矩形
- /******鼠標(biāo)只能在這個(gè)范圍內(nèi)移動(dòng)******/
- unsigned int w = ::GetSystemMetrics(SM_CXSCREEN);
- unsigned int h = ::GetSystemMetrics(SM_CYSCREEN);
- rect.bottom= h/3;
- rect.top= h/3;
- rect.right = w-9;
- rect.left = w-9;
- while(1)
- { // 每隔100 毫秒鎖定一次,看你吖的移動(dòng)鼠標(biāo)啦~~~~
- ClipCursor(&rect);
- Sleep(100);
- }
- return 0;
- }
- // 界面透明化
- SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);HINSTANCE hInst = LoadLibrary("User32.DLL");
- if(hInst)
- {
- typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
- MYFUNC fun = NULL;
- //取得SetLayeredWindowAttributes函數(shù)指針
- fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
- if(fun)fun(this->GetSafeHwnd(),RGB(255,255,255),240,2);
- FreeLibrary(hInst);
- }
- /*第二個(gè)參數(shù)是 設(shè)置透明色 第三個(gè)參數(shù)是 設(shè)置不透明度 255就是不透明 0就是全透明 第四個(gè)參數(shù) 是一個(gè)方式選擇 1表示讓第二個(gè)參數(shù)的顏色透明此時(shí)第三個(gè)參數(shù)無(wú)效 2表示全窗口透明此時(shí)第二個(gè)參數(shù)無(wú)效 */
- unsigned int w = ::GetSystemMetrics(SM_CXSCREEN); // 獲取屏幕寬
- unsigned int h = ::GetSystemMetrics(SM_CYSCREEN); // 獲取屏幕高
- SetWindowPos(&wndTopMost,0,0,w,h,SWP_SHOWWINDOW); // 進(jìn)行置頂操作
- CWnd *pWnd;
- pWnd = GetDlgItem( IDC_STATIC ); //獲取控件指針,IDC_STATIC為控件ID號(hào)
- pWnd->MoveWindow( CRect(0,22,w,h) ); // 移動(dòng) 重設(shè)置控件為 w寬 h高
- SetDlgItemText(IDC_Password,"");
- pWnd = GetDlgItem( IDC_Password );
- pWnd->MoveWindow( CRect(0,0,w,22) ); // 移動(dòng) 重設(shè)置密碼控件為 w寬 h高
- 【鎖定】按鈕觸發(fā)的代碼:
- void CLock::OnLockPM()
- {
- CString temp;
- char Password[MAX_PATH];
- char tmp[MAX_PATH];
- int Cs = 1; // 測(cè)試使用
- GetDlgItemText(IDC_SPProssword,temp);
- strcpy(Password,temp);
- GetDlgItemText(IDC_QRProssword,temp);
- strcpy(tmp,temp);
- int len = strlen(Password)-1;
- for (int i=0; i<=len; i++)
- {
- if (Password[i] >= 0x30 && Password[i] <=0x5A || Password[i] >= 0x60 && Password[i] <= 0x69)
- {
- if (Password[i]!= 0x40)
- {
- Cs = 1;
- }
- }
- else
- Cs = 0;
- }
- if (Cs)
- {
- if ( strcmp(Password,tmp) == 0 && strlen(Password)!=0 && strlen(tmp)!=0)
- {
- if (!AUTO(1,NULL))// 開(kāi)機(jī)啟動(dòng)
- AfxMessageBox("由于權(quán)限原因,添加開(kāi)機(jī)啟動(dòng)項(xiàng)失!重啟后將無(wú)法鎖屏!請(qǐng)解除安全軟件對(duì)本程序的攔截");
- if(!AUTO(2,Password))// 存儲(chǔ)密碼
- {
- AfxMessageBox("無(wú)法驗(yàn)證密碼~ 程序?qū)⑼顺鰚");
- exit(1);
- }
- PostMessage(WM_CLOSE);
- }
- else
- {
- if ( strlen(Password)==0 && strlen(tmp)==0 )
- AfxMessageBox("密碼不允許為空!");
- else
- AfxMessageBox("兩次輸入的密碼不匹配!");
- SetDlgItemText(IDC_SPProssword,"");// 清空
- SetDlgItemText(IDC_QRProssword,"");// 清空
- GetDlgItem(IDC_SPProssword)-> SetFocus(); // 設(shè)置光標(biāo)在第一個(gè)文本框里
- }
- }
- else
- AfxMessageBox("鎖屏密碼只允許是 數(shù)字 或 字母 ~不允許包含其他的字符!");
- }
- 【使用上一次設(shè)置的密碼】按鈕觸發(fā)的代碼:
- void CLock::onPassword()
- {
- if (!AUTO(1,NULL))// 開(kāi)機(jī)啟動(dòng)
- AfxMessageBox("由于權(quán)限原因,添加開(kāi)機(jī)啟動(dòng)項(xiàng)失敗!重啟后將無(wú)法鎖屏!請(qǐng)解除安全軟件對(duì)本程序的攔截");
- PostMessage(WM_CLOSE);
- }
- 【刪除上一次設(shè)置的密碼】按鈕觸發(fā)的代碼:
- void CLock::OnDelPassword()
- {
- // TODO: Add your control notification handler code here
- if (!SHDeleteKey(HKEY_CURRENT_USER,"鎖屏小工具"))
- {
- GetDlgItem(IDC_Password)->ShowWindow(SW_HIDE);// 顯示按鈕
- GetDlgItem(IDC_DelPassword)->ShowWindow(SW_HIDE);// 顯示按鈕
- GetDlgItem(IDC_TS)->ShowWindow(SW_SHOW);
- AfxMessageBox("清除成功!");
- }
- }
- 解鎖時(shí) 回車(chē)觸發(fā)的代碼
- void CMyDlg::OnLand()
- {
- // TODO: Add your control notification handler code here
- char Ts[]="敖菜像焙涕扎救蜜昂睜到廢墻臍兆狹瘟幼敖菜像---";
- if (Scan(Ts))
- MessageBox(Ts,NULL,MB_OK|MB_SYSTEMMODAL);
- CString tmp;
- char Password[MAX_PATH]={0};
- char WBPassword[MAX_PATH]={0};
- GetDlgItemText(IDC_Password,tmp);
- strcpy(WBPassword,tmp);
- HKEY RegKey;
- LPBYTE Size=new BYTE [MAX_PATH]; // 要足夠大
- DWORD type=REG_BINARY;
- DWORD cbData=256;
- if(RegOpenKeyEx(HKEY_CURRENT_USER, "鎖屏小工具",
- 0, KEY_ALL_ACCESS, &RegKey) == ERROR_SUCCESS)
- {
- if ( RegQueryValueEx(RegKey,"password",NULL,&type,Size,&cbData) == ERROR_SUCCESS)
- {
- strcpy(Password,(char *)Size);// 利用DQCDEXE 全局變量通知
- delete []Size;
- }
- else
- AfxMessageBox("讀取密碼失。");
- }
- else
- AfxMessageBox("打開(kāi)指定的注冊(cè)表失。");
- if (strlen(WBPassword)==0)
- AfxMessageBox("請(qǐng)輸入解屏密碼!");
- else
- {
- if (strcmp(WBPassword,Password) == 0)
- {
- if (RegCreateKeyEx(HKEY_CURRENT_USER,"密碼正確",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&RegKey,NULL) == ERROR_SUCCESS)
- {
- RegCloseKey(RegKey);
- }
- else
- AfxMessageBox("修改注冊(cè)表失敗,暫時(shí)無(wú)法解鎖");
- }
- else
- {
- char Test[35];
- LockTime--;
- if (LockTime == 0)
- {
- CEdit *pEdit = (CEdit *)GetDlgItem(IDC_Password);
- pEdit-> SetPasswordChar(0);// 去除密碼屬性
- GetDlgItem(IDC_Password)->EnableWindow(0);
- GetDlgItem(IDC_BUTTON1)->EnableWindow(0);
- SetDlgItemText(IDC_Password,"對(duì)不起,由于您連續(xù)輸入密碼錯(cuò)誤 3 次,三分鐘內(nèi)不允許輸入密碼!");
- AfxMessageBox("對(duì)不起,由于您連續(xù)輸入密碼錯(cuò)誤 3 次,三分鐘內(nèi)不允許輸入密碼!");
- Sleep(180000);// 掛起三分鐘
- GetDlgItem(IDC_Password)->EnableWindow(1);
- GetDlgItem(IDC_BUTTON1)->EnableWindow(1);
- GetDlgItem(IDC_Password)-> SetFocus(); // 設(shè)置光標(biāo)在第一個(gè)文本框里
- pEdit-> SetPasswordChar('*');// 設(shè)置密碼屬性
- LockTime=3;
- }
- else
- {
- sprintf(Test,"輸入密碼錯(cuò)誤!您還有 %d 次機(jī)會(huì)",LockTime);
- AfxMessageBox(Test);
- }
- SetDlgItemText(IDC_Password,"");
- }
- }
- }
復(fù)制代碼
|