找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6806|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

c語(yǔ)言作品 -> 鎖屏小工具 V2.0

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71922 發(fā)表于 2015-1-11 02:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    花了兩天的時(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 源碼:
  1. =========================================================================================================

  2. #include <windows.h>

  3. #include <stdio.h>

  4. #include <TLHELP32.H>

  5. #pragma comment(linker, "/OPT:NOWIN98")


  6. #include <shlwapi.h>// 刪除子鍵需要  

  7. #pragma comment(lib, "shlwapi.lib")


  8. HHOOK g_hMouse;

  9. HHOOK g_hMouse1;


  10. #pragma data_seg("MySec")

  11. HWND g_hand = NULL;

  12. #pragma  data_seg()

  13. #pragma  comment(linker,"/section:MySec,RWS")


  14. void UnhHook();

  15. int Reg(int i);// 限制任務(wù)管理器

  16. DWORD Pid;// 當(dāng)前進(jìn)程pid

  17. DWORD WPid;// 激活窗口的pid

  18. DWORD Process(char Processname[]); // 遍歷進(jìn)程

  19. int AUTODel(int Del)

  20. {

  21. char Key[]="鎖屏小工具";

  22. HKEY RegKey;

  23. if (Del)

  24. {

  25. if(RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",

  26. 0, KEY_ALL_ACCESS, &RegKey) != ERROR_SUCCESS)

  27. return 1;

  28. if (!RegDeleteValue(RegKey,Key))

  29. {

  30. RegCloseKey(RegKey);

  31. return 1;

  32. }

  33. }

  34. else

  35. {

  36. if(RegOpenKeyEx(HKEY_CURRENT_USER, "密碼正確",0, KEY_ALL_ACCESS, &RegKey) == ERROR_SUCCESS)

  37. {

  38. SHDeleteKey(HKEY_CURRENT_USER,"密碼正確");

  39. SHDeleteKey(HKEY_CURRENT_USER,"開(kāi)機(jī)啟動(dòng)");

  40. RegCloseKey(RegKey);

  41. return 0;

  42. }

  43. else

  44. return 1;

  45. }

  46. RegCloseKey(RegKey);

  47. return 0;

  48. }


  49. void CALLBACK PasswordCmp(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)

  50. {

  51. if (!AUTODel(0))

  52. {

  53. if (!AUTODel(1))

  54. MessageBox(0,"刪除自啟動(dòng)失!重啟后可能還會(huì)被鎖屏,請(qǐng)用安全工具清除本開(kāi)機(jī)啟動(dòng)項(xiàng)!","注意",MB_OK|MB_SYSTEMMODAL);

  55. KillTimer(hWnd,1);// 結(jié)束定時(shí)


  56. if (Reg(0))

  57. MessageBox(0,"解除對(duì)windows 安全限制失敗~~~請(qǐng)解除安全軟件對(duì)本軟件的攔截!解除攔截后再重新鎖屏后解鎖即可~~","Error",MB_SYSTEMMODAL);

  58. SendMessage(g_hand,WM_CLOSE,0,0); // 關(guān)閉窗口

  59. UnhHook();


  60. }

  61. }




  62. LRESULT CALLBACK MouseProc(

  63.   int nCode,      // hook code

  64.   WPARAM wParam,  // message identifier

  65.   LPARAM lParam   // mouse coordinates

  66.   )

  67. {

  68. return 1;

  69. }

  70. LRESULT CALLBACK KeyboardProc(

  71. int code,       // hook code

  72. WPARAM wParam,  // virtual-key code

  73. LPARAM lParam   // keystroke-message information

  74. )

  75. {

  76. /*//調(diào)試程序時(shí)使用

  77. if (VK_F2== wParam)

  78. {

  79. SendMessage(g_hand,WM_CLOSE,0,0);

  80. UnhHook();

  81. if (!AUTODel(1))

  82. MessageBox(0,"刪除自啟動(dòng)失。≈貑⒑罂赡苓會(huì)被鎖屏,請(qǐng)用安全工具清除本開(kāi)機(jī)啟動(dòng)項(xiàng)!","注意",MB_OK|MB_SYSTEMMODAL);

  83. if (Reg(0))

  84. MessageBox(0,"解除對(duì)windows 安全限制失敗~~~請(qǐng)解除安全軟件對(duì)本軟件的攔截!解除攔截后再重新鎖屏后解鎖即可~~","Error",MB_SYSTEMMODAL);

  85. }

  86. */

  87. // 獲取當(dāng)前激活窗口的進(jìn)程PID

  88. GetWindowThreadProcessId(GetActiveWindow(), &WPid);

  89. // 與自身比較

  90. /* VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)

  91. * 0x40 : unassigned

  92. * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)

  93. *小鍵盤(pán) 0 - 9 (0x60 - 0x69)

  94. *13 回車(chē)鍵 || 8 退格鍵*/

  95. if (WPid == Pid) // 如果當(dāng)前屬于窗口是本進(jìn)程 則不屏蔽這些按鍵

  96. {

  97. if (wParam >= 0x30 && wParam <=0x5A || wParam >= 0x60 && wParam <= 0x69 || wParam == 13 || wParam == 8)

  98. {

  99. if (wParam != 0x40)

  100. {

  101. return CallNextHookEx(g_hMouse1, code, wParam, lParam) ;

  102. }

  103. }

  104. }

  105. return 1;

  106. }



  107. void SetHook(HWND hwnd)

  108. {

  109. GetWindowThreadProcessId(hwnd, &Pid);

  110. g_hand=hwnd;// 還是不HOOK 鼠標(biāo)吧 會(huì)有忙狀態(tài)~~~

  111. //g_hMouse = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("HookDll"),0);

  112. g_hMouse1 = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("HookDll"),0);

  113. DWORD ProcessID =  Process("explorer.exe");

  114. HANDLE Proceshandle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);

  115. TerminateProcess(Proceshandle ,1);

  116.         SetTimer(hwnd,1,1,PasswordCmp);// 設(shè)置定時(shí)器

  117. if (Reg(1))

  118. {

  119. MessageBox(0,"注意!無(wú)法限制windows 安全,請(qǐng)解除安全軟件對(duì)本軟件的限制~","Error",MB_SYSTEMMODAL);

  120. }

  121. }


  122. void UnhHook()

  123. {

  124. //UnhookWindowsHookEx(g_hMouse);

  125. UnhookWindowsHookEx(g_hMouse1);

  126. //ClipCursor(NULL); //釋放

  127. ShellExecute(NULL,"open","explorer.exe",NULL,NULL,SW_SHOW);

  128. }


  129. int Reg(int i)

  130. {

  131. char Reg[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";

  132. char Regoff[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";

  133. char Regz[] = "DisableTaskMgr";// 屏蔽任務(wù)管理器

  134. char RegLock[] = "DisableLockWorkstation";// 屏蔽鎖定計(jì)算機(jī)

  135. char Regnooff[] = "NoLogOff";// 屏蔽注銷(xiāo)

  136. char Regnoexit[] = "NoClose";// 屏蔽關(guān)機(jī)

  137. char RegnoKey[] = "NoWinKeys";// WIN+E、WIN+D、WIN+F、WIN+R等Windows快捷鍵

  138. //char RegnoRun[] = "RestrictRun";// 禁止允許任何程序

  139. char Nopassword[] = "DisableChangePassword";// 屏蔽更改密碼

  140. HKEY hkey,hkeyoff;

  141. DWORD Zhi=1;

  142. //if(RegCreateKeyEx(HKEY_CURRENT_USER,Reg,NULL,KEY_ALL_ACCESS ,&hkey))

  143. if(RegCreateKeyEx(HKEY_CURRENT_USER,Reg,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hkey,NULL))

  144. {

  145. RegCloseKey(hkey);

  146. return 1;// 創(chuàng)建失敗則 返回1 提示錯(cuò)誤

  147. }

  148. //if(RegCreateKeyEx(HKEY_CURRENT_USER,Regoff,NULL,KEY_ALL_ACCESS ,&hkeyoff))

  149. if(RegCreateKeyEx(HKEY_CURRENT_USER,Regoff,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hkeyoff,NULL))

  150. {

  151. RegCloseKey(hkeyoff);

  152. return 1;// 創(chuàng)建失敗則 返回1 提示錯(cuò)誤

  153. }

  154. if (i)

  155. {

  156. // 屏蔽任務(wù)管理器

  157. if (RegSetValueEx(hkey,Regz,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))

  158. {

  159. RegCloseKey(hkey);

  160. return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤

  161. }


  162. // 屏蔽鎖定計(jì)算機(jī)

  163. if (RegSetValueEx(hkey,RegLock,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))

  164. {

  165. RegCloseKey(hkey);

  166. return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤

  167. }

  168. // 屏蔽注銷(xiāo)

  169. if (RegSetValueEx(hkeyoff,Regnooff,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))

  170. {

  171. RegCloseKey(hkeyoff);

  172. return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤

  173. }

  174.         // 屏蔽關(guān)機(jī)

  175. if (RegSetValueEx(hkeyoff,Regnoexit,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))

  176. {

  177. RegCloseKey(hkeyoff);

  178. return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤

  179. }

  180. // 屏蔽更改密碼

  181. if (RegSetValueEx(hkey,Nopassword,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))

  182. {

  183. RegCloseKey(hkey);

  184. return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤

  185. }

  186. // 屏蔽系統(tǒng)快捷鍵

  187. if (RegSetValueEx(hkeyoff,RegnoKey,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))

  188. {

  189. RegCloseKey(hkeyoff);

  190. return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤

  191. }

  192. RegCloseKey(hkeyoff);

  193. RegCloseKey(hkey);

  194. /*// 只修改內(nèi)存 重啟后會(huì)失效 避免重啟后鎖屏程序無(wú)法運(yùn)行

  195. if(RegCreateKeyEx(HKEY_CURRENT_USER,Regoff,0,0,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,NULL,&hkeyoff,NULL))

  196. {

  197. RegCloseKey(hkeyoff);

  198. return 1;// 創(chuàng)建失敗則 返回1 提示錯(cuò)誤

  199. }

  200. if (RegSetValueEx(hkeyoff,RegnoRun,0,REG_DWORD,(CONST BYTE*)&Zhi,sizeof(Zhi)))

  201. {

  202. RegCloseKey(hkeyoff);

  203. return 1;//設(shè)置失敗則返回1 提示錯(cuò)誤

  204. }


  205. RegCloseKey(hkeyoff);

  206. */return 0;// 如果找到則返回0 提示成功

  207. }

  208. else// 解除限制

  209. {

  210. // 解除任務(wù)管理器限制

  211. if (RegDeleteValue(hkey,Regz))

  212. return 1;

  213. // 解除鎖定計(jì)算機(jī)限制

  214. if (RegDeleteValue(hkey,RegLock))

  215. return 1;

  216. // 解除鎖定注銷(xiāo)

  217. if (RegDeleteValue(hkeyoff,Regnooff))

  218. return 1;

  219. // 解除鎖定注銷(xiāo)

  220. if (RegDeleteValue(hkey,Nopassword))

  221. return 1;

  222. // 解除鎖定關(guān)機(jī)

  223. if (RegDeleteValue(hkeyoff,Regnoexit))

  224. return 1;

  225. // 解除系統(tǒng)快捷鍵限制

  226. if (RegDeleteValue(hkeyoff,RegnoKey))

  227. return 1;

  228. /*// 解除允許程序的權(quán)限

  229. if (RegDeleteValue(hkeyoff,RegnoRun))

  230. return 1;

  231. */return 0;

  232. }

  233. }


  234. DWORD Process(char Processname[])

  235. {

  236. PROCESSENTRY32 ProcessEnt = {0};

  237. HANDLE hPrOhandle;

  238. ProcessEnt.dwSize = sizeof(PROCESSENTRY32);

  239. hPrOhandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

  240. BOOL bRet = Process32First(hPrOhandle,&ProcessEnt);

  241. while (bRet)

  242. {

  243. if (strcmpi(Processname,ProcessEnt.szExeFile) == 0)

  244. {

  245. return ProcessEnt.th32ProcessID;

  246. }

  247. bRet = Process32Next(hPrOhandle,&ProcessEnt);

  248. }

  249. return 1;

  250. }

  251. 以下是 鎖定小工具 V2.0.exe 源碼:(由于是MFC設(shè)計(jì)的界面 代碼無(wú)法全部給出 只給出關(guān)鍵的代碼)

  252. =========================================================================================================

  253. 定義兩個(gè)全局變量

  254. HWND g_hwnd;    // 傳遞給DLL用的

  255. int LockTime = 3;// 輸入密碼錯(cuò)誤三次 則凍結(jié) 3 分鐘

  256. 程序加載時(shí):BOOL CMyDlg::OnInitDialog()

  257. HKEY RegKey;

  258. if(RegOpenKeyEx(HKEY_CURRENT_USER, "開(kāi)機(jī)啟動(dòng)",0, KEY_ALL_ACCESS, &RegKey) != ERROR_SUCCESS)

  259. {

  260. CLock dlg;

  261. dlg.DoModal();    // 創(chuàng)建 設(shè)置 子窗口界面

  262. }

  263. else    // 否則直接鎖屏

  264. RegCloseKey(RegKey);

  265. g_hwnd = m_hWnd; // 將本窗口的句柄傳遞給DLL

  266. // 創(chuàng)建線程 進(jìn)行HOOK

  267. CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)HOOK,NULL,NULL,NULL);

  268. DWORD WINAPI HOOK()

  269. {// 去掉鼠標(biāo)忙狀態(tài)

  270. GetInputState();

  271. PostThreadMessage(GetCurrentThreadId(),NULL,0,0);

  272. MSGmsg;

  273. GetMessage(&msg, NULL, NULL, NULL);

  274. SetHook(g_hwnd);    // HOOK

  275. RECT rect; //定義個(gè)矩形

  276. /******鼠標(biāo)只能在這個(gè)范圍內(nèi)移動(dòng)******/

  277. unsigned int w = ::GetSystemMetrics(SM_CXSCREEN);

  278. unsigned int h = ::GetSystemMetrics(SM_CYSCREEN);

  279. rect.bottom= h/3;

  280. rect.top= h/3;

  281. rect.right  = w-9;

  282. rect.left   = w-9;

  283. while(1)

  284. {     // 每隔100 毫秒鎖定一次,看你吖的移動(dòng)鼠標(biāo)啦~~~~

  285. ClipCursor(&rect);

  286. Sleep(100);

  287. }

  288. return 0;

  289. }

  290. // 界面透明化

  291. SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);HINSTANCE hInst = LoadLibrary("User32.DLL");

  292. if(hInst)

  293. {

  294. typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);

  295. MYFUNC fun = NULL;

  296. //取得SetLayeredWindowAttributes函數(shù)指針

  297. fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");

  298. if(fun)fun(this->GetSafeHwnd(),RGB(255,255,255),240,2);

  299. FreeLibrary(hInst);

  300. }

  301. /*第二個(gè)參數(shù)是 設(shè)置透明色   第三個(gè)參數(shù)是 設(shè)置不透明度  255就是不透明  0就是全透明  第四個(gè)參數(shù)  是一個(gè)方式選擇  1表示讓第二個(gè)參數(shù)的顏色透明此時(shí)第三個(gè)參數(shù)無(wú)效  2表示全窗口透明此時(shí)第二個(gè)參數(shù)無(wú)效 */

  302. unsigned int w = ::GetSystemMetrics(SM_CXSCREEN);    // 獲取屏幕寬

  303. unsigned int h = ::GetSystemMetrics(SM_CYSCREEN);   // 獲取屏幕高

  304. SetWindowPos(&wndTopMost,0,0,w,h,SWP_SHOWWINDOW);    // 進(jìn)行置頂操作

  305. CWnd *pWnd;

  306. pWnd = GetDlgItem( IDC_STATIC );    //獲取控件指針,IDC_STATIC為控件ID號(hào)

  307. pWnd->MoveWindow( CRect(0,22,w,h) );    // 移動(dòng) 重設(shè)置控件為 w寬 h高

  308. SetDlgItemText(IDC_Password,"");

  309. pWnd = GetDlgItem( IDC_Password );   

  310. pWnd->MoveWindow( CRect(0,0,w,22) );    // 移動(dòng) 重設(shè)置密碼控件為 w寬 h高

  311. 【鎖定】按鈕觸發(fā)的代碼:

  312. void CLock::OnLockPM()

  313. {

  314. CString temp;

  315. char Password[MAX_PATH];

  316. char tmp[MAX_PATH];

  317. int Cs = 1; // 測(cè)試使用

  318. GetDlgItemText(IDC_SPProssword,temp);

  319. strcpy(Password,temp);

  320. GetDlgItemText(IDC_QRProssword,temp);

  321. strcpy(tmp,temp);

  322. int len = strlen(Password)-1;

  323. for (int i=0; i<=len; i++)

  324. {

  325. if (Password[i] >= 0x30 && Password[i] <=0x5A || Password[i] >= 0x60 && Password[i] <= 0x69)

  326. {

  327. if (Password[i]!= 0x40)

  328. {

  329. Cs = 1;

  330. }

  331. }

  332. else

  333. Cs = 0;

  334. }

  335. if (Cs)

  336. {

  337. if ( strcmp(Password,tmp) == 0 && strlen(Password)!=0 && strlen(tmp)!=0)

  338. {

  339. if (!AUTO(1,NULL))// 開(kāi)機(jī)啟動(dòng)

  340. AfxMessageBox("由于權(quán)限原因,添加開(kāi)機(jī)啟動(dòng)項(xiàng)失!重啟后將無(wú)法鎖屏!請(qǐng)解除安全軟件對(duì)本程序的攔截");

  341. if(!AUTO(2,Password))// 存儲(chǔ)密碼

  342. {

  343. AfxMessageBox("無(wú)法驗(yàn)證密碼~ 程序?qū)⑼顺鰚");

  344. exit(1);

  345. }

  346. PostMessage(WM_CLOSE);

  347. }

  348. else

  349. {

  350. if ( strlen(Password)==0 && strlen(tmp)==0 )

  351. AfxMessageBox("密碼不允許為空!");

  352. else

  353. AfxMessageBox("兩次輸入的密碼不匹配!");

  354. SetDlgItemText(IDC_SPProssword,"");// 清空

  355. SetDlgItemText(IDC_QRProssword,"");// 清空

  356. GetDlgItem(IDC_SPProssword)-> SetFocus(); // 設(shè)置光標(biāo)在第一個(gè)文本框里

  357. }

  358. }

  359. else

  360. AfxMessageBox("鎖屏密碼只允許是 數(shù)字 或 字母 ~不允許包含其他的字符!");

  361. }

  362. 【使用上一次設(shè)置的密碼】按鈕觸發(fā)的代碼:

  363. void CLock::onPassword()

  364. {

  365. if (!AUTO(1,NULL))// 開(kāi)機(jī)啟動(dòng)

  366. AfxMessageBox("由于權(quán)限原因,添加開(kāi)機(jī)啟動(dòng)項(xiàng)失敗!重啟后將無(wú)法鎖屏!請(qǐng)解除安全軟件對(duì)本程序的攔截");

  367. PostMessage(WM_CLOSE);

  368. }

  369. 【刪除上一次設(shè)置的密碼】按鈕觸發(fā)的代碼:

  370. void CLock::OnDelPassword()

  371. {

  372. // TODO: Add your control notification handler code here

  373. if (!SHDeleteKey(HKEY_CURRENT_USER,"鎖屏小工具"))

  374. {

  375. GetDlgItem(IDC_Password)->ShowWindow(SW_HIDE);// 顯示按鈕

  376. GetDlgItem(IDC_DelPassword)->ShowWindow(SW_HIDE);// 顯示按鈕

  377. GetDlgItem(IDC_TS)->ShowWindow(SW_SHOW);

  378. AfxMessageBox("清除成功!");

  379. }

  380. }

  381. 解鎖時(shí) 回車(chē)觸發(fā)的代碼

  382. void CMyDlg::OnLand()

  383. {

  384. // TODO: Add your control notification handler code here

  385. char Ts[]="敖菜像焙涕扎救蜜昂睜到廢墻臍兆狹瘟幼敖菜像---";

  386. if (Scan(Ts))

  387. MessageBox(Ts,NULL,MB_OK|MB_SYSTEMMODAL);

  388. CString tmp;

  389. char Password[MAX_PATH]={0};

  390. char WBPassword[MAX_PATH]={0};

  391.         GetDlgItemText(IDC_Password,tmp);

  392. strcpy(WBPassword,tmp);

  393. HKEY RegKey;

  394. LPBYTE   Size=new  BYTE [MAX_PATH];   // 要足夠大

  395. DWORD type=REG_BINARY;

  396. DWORD cbData=256;

  397. if(RegOpenKeyEx(HKEY_CURRENT_USER, "鎖屏小工具",

  398. 0, KEY_ALL_ACCESS, &RegKey) ==  ERROR_SUCCESS)

  399. {

  400. if ( RegQueryValueEx(RegKey,"password",NULL,&type,Size,&cbData) == ERROR_SUCCESS)

  401. {

  402. strcpy(Password,(char *)Size);// 利用DQCDEXE 全局變量通知

  403. delete []Size;

  404. }

  405. else

  406. AfxMessageBox("讀取密碼失。");

  407. }

  408. else

  409. AfxMessageBox("打開(kāi)指定的注冊(cè)表失。");


  410. if (strlen(WBPassword)==0)

  411. AfxMessageBox("請(qǐng)輸入解屏密碼!");

  412. else

  413. {

  414. if (strcmp(WBPassword,Password) == 0)

  415. {

  416. if (RegCreateKeyEx(HKEY_CURRENT_USER,"密碼正確",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&RegKey,NULL) == ERROR_SUCCESS)

  417. {

  418. RegCloseKey(RegKey);

  419. }

  420. else

  421. AfxMessageBox("修改注冊(cè)表失敗,暫時(shí)無(wú)法解鎖");

  422. }

  423. else

  424. {

  425. char Test[35];

  426. LockTime--;

  427. if (LockTime == 0)

  428. {

  429. CEdit   *pEdit   =   (CEdit   *)GetDlgItem(IDC_Password);

  430. pEdit-> SetPasswordChar(0);// 去除密碼屬性

  431. GetDlgItem(IDC_Password)->EnableWindow(0);

  432. GetDlgItem(IDC_BUTTON1)->EnableWindow(0);

  433. SetDlgItemText(IDC_Password,"對(duì)不起,由于您連續(xù)輸入密碼錯(cuò)誤 3 次,三分鐘內(nèi)不允許輸入密碼!");

  434. AfxMessageBox("對(duì)不起,由于您連續(xù)輸入密碼錯(cuò)誤 3 次,三分鐘內(nèi)不允許輸入密碼!");

  435. Sleep(180000);// 掛起三分鐘

  436. GetDlgItem(IDC_Password)->EnableWindow(1);

  437. GetDlgItem(IDC_BUTTON1)->EnableWindow(1);

  438. GetDlgItem(IDC_Password)-> SetFocus(); // 設(shè)置光標(biāo)在第一個(gè)文本框里

  439. pEdit-> SetPasswordChar('*');// 設(shè)置密碼屬性

  440. LockTime=3;

  441. }

  442. else

  443. {

  444. sprintf(Test,"輸入密碼錯(cuò)誤!您還有 %d 次機(jī)會(huì)",LockTime);

  445. AfxMessageBox(Test);

  446. }

  447. SetDlgItemText(IDC_Password,"");

  448. }

  449. }

  450. }
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:71922 發(fā)表于 2015-1-11 02:30 | 只看該作者
鎖屏小工具 V3.0更新:

   5.21日 更新:有些機(jī)器上解屏之后會(huì)彈出【程序已運(yùn)行...】的對(duì)話框,本來(lái)是想防止用戶啟動(dòng)多次本程序,現(xiàn)在想想也就不必要啦..

    應(yīng)網(wǎng)友們要求,解決了一些BUG,整個(gè)程序重新設(shè)計(jì),全新的界面,并去除冗余代碼,新增一些人性化的功能,例如:通過(guò)快捷鍵快速鎖屏,系統(tǒng)空閑時(shí)鎖屏。鎖屏?xí)r關(guān)閉顯示器等...

本想再加入手機(jī)遠(yuǎn)程鎖屏和解屏功能,但對(duì)HTTP協(xié)議還不夠熟悉,可能會(huì)花上好一段時(shí)間,為了我的作品盡善盡美就暫且放下了。

     在介紹新功能前,先感謝【寒栤ξ玄鉄ン QQ:7389187372】反饋 V2.0版本 在Win7下無(wú)法正常使用的問(wèn)題以及屏蔽不了第三方桌面插件 如QQ桌面。關(guān)于這方面的BUG,由于個(gè)人原因,并沒(méi)有去實(shí)驗(yàn)及分析并解決。V3.0 版本可能也不兼容Win7,至于第三方桌面插件也尚未測(cè)試過(guò)。鎖屏小工具 V3.0 在Windows XP下測(cè)試通過(guò)。


謝謝 【寒栤ξ玄鉄ン QQ:7389178372】、【愛(ài)~~徘徊~  QQ:13985874494】反饋的建議和意見(jiàn)

謝謝 【東東 QQ:99567177092】在 V3.0 版本中幫忙測(cè)試軟件。

謝謝 【懶·。 wangmaokun1992@qq.com(113747741213)】、還有部分網(wǎng)友由于聊天記錄不小心刪除,所以有些網(wǎng)友并沒(méi)有在列,也一并感。原本只是一個(gè)練習(xí)作品,沒(méi)想到你們會(huì)喜歡,很謝謝你們的支持...



【注意】:由于本程序采用HOOK技術(shù),可能會(huì)導(dǎo)致殺軟的誤殺及攔截,在使用本程序前請(qǐng)將其列入信任名單。



新增功能介紹:
            【密碼提示】:好幾個(gè)網(wǎng)友都是因?yàn)橥浢艽a而聯(lián)系到我,而這個(gè)功能是【愛(ài)~~徘徊~  QQ:13985874494】提出的建議,覺(jué)得非常不錯(cuò),就增加了整個(gè)功能,用于忘記了密碼時(shí)可以根據(jù)自己設(shè)定的密碼提示信息得到印象。感謝【愛(ài)~~徘徊~ 】o(∩_∩)o ~~
            【鎖屏圖像說(shuō)來(lái)覺(jué)得搞笑,認(rèn)為 V2.0 鎖屏圖片看,認(rèn)為看,索性增加可以自由鎖屏圖片功能了。同時(shí)支持修改透明度。
            系統(tǒng)空閑時(shí)鎖屏】:想到可能網(wǎng)友會(huì)經(jīng)常離開(kāi)自己電腦,但是不想自己電腦別人動(dòng),關(guān)機(jī)麻煩,雖然可以通過(guò)系統(tǒng)自帶屏幕保護(hù)方式加鎖,不夠個(gè)性,增加個(gè)功能,設(shè)定時(shí)間例如1分鐘,當(dāng)電腦沒(méi)有操作時(shí)間達(dá)到1分鐘會(huì)自動(dòng)鎖屏。可以同時(shí)勾選【鎖屏?xí)r關(guān)閉顯示功能,達(dá)到省點(diǎn)目的。通過(guò)快捷鍵 Ctrl + Alt + Shift + F9 隱藏窗口,這樣不會(huì)占用桌面空間...覺(jué)得個(gè)功能非常不錯(cuò)。
           鎖屏時(shí)關(guān)閉顯示器顧名思義,鎖屏?xí)r關(guān)閉顯示器啦,其實(shí)不算關(guān)閉顯示器,只是顯示器處于休眠狀態(tài)。
            【快速鎖屏】:設(shè)置想過(guò)設(shè)置可以通過(guò) Ctrl + Alt + Shift + F8 快捷鍵快速鎖屏。一般設(shè)置密碼,然后隱藏窗口,出去時(shí)候按一下快捷鍵立即鎖屏。
            【隱藏窗口】:通過(guò) Ctrl + Alt + Shift + F8 快捷鍵隱藏窗口

程序下載:
spxgjjxz.zip (271.66 KB, 下載次數(shù): 29)


回復(fù)

使用道具 舉報(bào)

板凳
ID:146011 發(fā)表于 2016-11-3 22:50 | 只看該作者
我來(lái)看看
回復(fù)

使用道具 舉報(bào)

地板
ID:146011 發(fā)表于 2016-11-3 23:01 | 只看該作者
鎖屏小工具
回復(fù)

使用道具 舉報(bào)

5#
ID:311041 發(fā)表于 2018-4-18 17:38 | 只看該作者
有個(gè)不情之請(qǐng),您可以分享源碼嗎,想學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表