找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 6837|回复: 4
收起左侧

c语言作品 -> 锁屏小工具 V2.0

[复制链接]
ID:71922 发表于 2015-1-11 02:15 | 显示全部楼层 |阅读模式
    花了两天的时间,终于将其“觉醒”成功。嘎嘎~~~ 当设计1.0 版本的 没有密码验证,心里就一直觉得很不舒服。觉得它不是一个完整的程序,虽然可以锁定键盘、鼠标、屏幕...但却连最基本的密码验证都没有。这样的防御形同虚设,那时够纠结的...现在就看看完善之后的 V2.0 界面吧~~ 感觉舒服多了~~~嘎嘎...先不说它的功能强不强悍 至少它的功能完整的~~

设置界面:


锁屏界面:



实现原理:
    利用HOOK 钩子使键盘失效,利用ClipCursor(&rect); 函数限制鼠标移动的位置,屏蔽一些系统快捷键是通过修改注册表实现的。
    WIN键是通过结束 explorer.exe 的进程实现屏蔽。同时由于explorer.exe 进程的结束,也激活了注册表的相关键值生效。
    锁定时所显示的那张图其实是一个随屏幕大小而改变的对话框。对话框中加入了一个图片控件而已。
    然后将利用SetWindowPos(&wndTopMost,0,0,w,h,SWP_SHOWWINDOW);将其置顶。

功能:
    锁定【鼠标移动】、    屏蔽【键盘输入】、屏蔽【注销按钮】、屏蔽【关机按钮】、
    屏蔽【更改密码】、屏蔽【任务管理器】、屏蔽【锁定计算机】、屏蔽【系统快捷键】
    锁屏时程序会设定开机自启动,解屏时删除开机自启动,达到未输入解屏密码时,即使重启之后程序仍会锁屏!
    程序附带自校验,在一定的程度上防范恶意修改及病毒感染。

缺点:
    依靠第三方实现部分功能,不能自己实现...
    密码保存是以明文的形式保存,加密算法的缺陷,导致加密后程序可能会在某些机器上出错。
    而且由于使用了HOOK技术导致某些不负责任的安全软件误报为病毒程序.。这很大部分上影响用户的使用。
    没有使用资源释放机制,是因为怕用户误会本是DLL木马。所以导致多了一个 HookDll.dll   的文件出现。
    由于对MFC不太熟悉,所以密码验证方面的代码写的有点复杂...虽然这是个小程序,如果是中大型的程序在一定的程度下影响效率。
    代码还是不够精悍!某些函数定义下显得不够规范。.
    不能自定义图像和其显示的透明度。



以下是 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);// 限制任务管理器

  16. DWORD Pid;// 当前进程pid

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

  18. DWORD Process(char Processname[]); // 遍历进程

  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,"开机启动");

  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,"删除自启动失败!重启后可能还会被锁屏,请用安全工具清除本开机启动项!","注意",MB_OK|MB_SYSTEMMODAL);

  55. KillTimer(hWnd,1);// 结束定时


  56. if (Reg(0))

  57. MessageBox(0,"解除对windows 安全限制失败~~~请解除安全软件对本软件的拦截!解除拦截后再重新锁屏后解锁即可~~","Error",MB_SYSTEMMODAL);

  58. SendMessage(g_hand,WM_CLOSE,0,0); // 关闭窗口

  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. /*//调试程序时使用

  77. if (VK_F2== wParam)

  78. {

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

  80. UnhHook();

  81. if (!AUTODel(1))

  82. MessageBox(0,"删除自启动失败!重启后可能还会被锁屏,请用安全工具清除本开机启动项!","注意",MB_OK|MB_SYSTEMMODAL);

  83. if (Reg(0))

  84. MessageBox(0,"解除对windows 安全限制失败~~~请解除安全软件对本软件的拦截!解除拦截后再重新锁屏后解锁即可~~","Error",MB_SYSTEMMODAL);

  85. }

  86. */

  87. // 获取当前激活窗口的进程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. *小键盘 0 - 9 (0x60 - 0x69)

  94. *13 回车键 || 8 退格键*/

  95. if (WPid == Pid) // 如果当前属于窗口是本进程 则不屏蔽这些按键

  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 鼠标吧 会有忙状态~~~

  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);// 设置定时器

  117. if (Reg(1))

  118. {

  119. MessageBox(0,"注意!无法限制windows 安全,请解除安全软件对本软件的限制~","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";// 屏蔽任务管理器

  134. char RegLock[] = "DisableLockWorkstation";// 屏蔽锁定计算机

  135. char Regnooff[] = "NoLogOff";// 屏蔽注销

  136. char Regnoexit[] = "NoClose";// 屏蔽关机

  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;// 创建失败则 返回1 提示错误

  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;// 创建失败则 返回1 提示错误

  153. }

  154. if (i)

  155. {

  156. // 屏蔽任务管理器

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

  158. {

  159. RegCloseKey(hkey);

  160. return 1;//设置失败则返回1 提示错误

  161. }


  162. // 屏蔽锁定计算机

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

  164. {

  165. RegCloseKey(hkey);

  166. return 1;//设置失败则返回1 提示错误

  167. }

  168. // 屏蔽注销

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

  170. {

  171. RegCloseKey(hkeyoff);

  172. return 1;//设置失败则返回1 提示错误

  173. }

  174.         // 屏蔽关机

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

  176. {

  177. RegCloseKey(hkeyoff);

  178. return 1;//设置失败则返回1 提示错误

  179. }

  180. // 屏蔽更改密码

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

  182. {

  183. RegCloseKey(hkey);

  184. return 1;//设置失败则返回1 提示错误

  185. }

  186. // 屏蔽系统快捷键

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

  188. {

  189. RegCloseKey(hkeyoff);

  190. return 1;//设置失败则返回1 提示错误

  191. }

  192. RegCloseKey(hkeyoff);

  193. RegCloseKey(hkey);

  194. /*// 只修改内存 重启后会失效 避免重启后锁屏程序无法运行

  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;// 创建失败则 返回1 提示错误

  199. }

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

  201. {

  202. RegCloseKey(hkeyoff);

  203. return 1;//设置失败则返回1 提示错误

  204. }


  205. RegCloseKey(hkeyoff);

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

  207. }

  208. else// 解除限制

  209. {

  210. // 解除任务管理器限制

  211. if (RegDeleteValue(hkey,Regz))

  212. return 1;

  213. // 解除锁定计算机限制

  214. if (RegDeleteValue(hkey,RegLock))

  215. return 1;

  216. // 解除锁定注销

  217. if (RegDeleteValue(hkeyoff,Regnooff))

  218. return 1;

  219. // 解除锁定注销

  220. if (RegDeleteValue(hkey,Nopassword))

  221. return 1;

  222. // 解除锁定关机

  223. if (RegDeleteValue(hkeyoff,Regnoexit))

  224. return 1;

  225. // 解除系统快捷键限制

  226. if (RegDeleteValue(hkeyoff,RegnoKey))

  227. return 1;

  228. /*// 解除允许程序的权限

  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设计的界面 代码无法全部给出 只给出关键的代码)

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

  253. 定义两个全局变量

  254. HWND g_hwnd;    // 传递给DLL用的

  255. int LockTime = 3;// 输入密码错误三次 则冻结 3 分钟

  256. 程序加载时:BOOL CMyDlg::OnInitDialog()

  257. HKEY RegKey;

  258. if(RegOpenKeyEx(HKEY_CURRENT_USER, "开机启动",0, KEY_ALL_ACCESS, &RegKey) != ERROR_SUCCESS)

  259. {

  260. CLock dlg;

  261. dlg.DoModal();    // 创建 设置 子窗口界面

  262. }

  263. else    // 否则直接锁屏

  264. RegCloseKey(RegKey);

  265. g_hwnd = m_hWnd; // 将本窗口的句柄传递给DLL

  266. // 创建线程 进行HOOK

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

  268. DWORD WINAPI HOOK()

  269. {// 去掉鼠标忙状态

  270. GetInputState();

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

  272. MSGmsg;

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

  274. SetHook(g_hwnd);    // HOOK

  275. RECT rect; //定义个矩形

  276. /******鼠标只能在这个范围内移动******/

  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 毫秒锁定一次,看你吖的移动鼠标啦~~~~

  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函数指针

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

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

  299. FreeLibrary(hInst);

  300. }

  301. /*第二个参数是 设置透明色   第三个参数是 设置不透明度  255就是不透明  0就是全透明  第四个参数  是一个方式选择  1表示让第二个参数的颜色透明此时第三个参数无效  2表示全窗口透明此时第二个参数无效 */

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

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

  304. SetWindowPos(&wndTopMost,0,0,w,h,SWP_SHOWWINDOW);    // 进行置顶操作

  305. CWnd *pWnd;

  306. pWnd = GetDlgItem( IDC_STATIC );    //获取控件指针,IDC_STATIC为控件ID号

  307. pWnd->MoveWindow( CRect(0,22,w,h) );    // 移动 重设置控件为 w宽 h高

  308. SetDlgItemText(IDC_Password,"");

  309. pWnd = GetDlgItem( IDC_Password );   

  310. pWnd->MoveWindow( CRect(0,0,w,22) );    // 移动 重设置密码控件为 w宽 h高

  311. 【锁定】按钮触发的代码:

  312. void CLock::OnLockPM()

  313. {

  314. CString temp;

  315. char Password[MAX_PATH];

  316. char tmp[MAX_PATH];

  317. int Cs = 1; // 测试使用

  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))// 开机启动

  340. AfxMessageBox("由于权限原因,添加开机启动项失败!重启后将无法锁屏!请解除安全软件对本程序的拦截");

  341. if(!AUTO(2,Password))// 存储密码

  342. {

  343. AfxMessageBox("无法验证密码~ 程序将退出~");

  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(); // 设置光标在第一个文本框里

  357. }

  358. }

  359. else

  360. AfxMessageBox("锁屏密码只允许是 数字 或 字母 ~不允许包含其他的字符!");

  361. }

  362. 【使用上一次设置的密码】按钮触发的代码:

  363. void CLock::onPassword()

  364. {

  365. if (!AUTO(1,NULL))// 开机启动

  366. AfxMessageBox("由于权限原因,添加开机启动项失败!重启后将无法锁屏!请解除安全软件对本程序的拦截");

  367. PostMessage(WM_CLOSE);

  368. }

  369. 【删除上一次设置的密码】按钮触发的代码:

  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. 解锁时 回车触发的代码

  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("打开指定的注册表失败!");


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

  411. AfxMessageBox("请输入解屏密码!");

  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("修改注册表失败,暂时无法解锁");

  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,"对不起,由于您连续输入密码错误 3 次,三分钟内不允许输入密码!");

  434. AfxMessageBox("对不起,由于您连续输入密码错误 3 次,三分钟内不允许输入密码!");

  435. Sleep(180000);// 挂起三分钟

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

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

  438. GetDlgItem(IDC_Password)-> SetFocus(); // 设置光标在第一个文本框里

  439. pEdit-> SetPasswordChar('*');// 设置密码属性

  440. LockTime=3;

  441. }

  442. else

  443. {

  444. sprintf(Test,"输入密码错误!您还有 %d 次机会",LockTime);

  445. AfxMessageBox(Test);

  446. }

  447. SetDlgItemText(IDC_Password,"");

  448. }

  449. }

  450. }
复制代码




回复

举报

ID:71922 发表于 2015-1-11 02:30 | 显示全部楼层
锁屏小工具 V3.0更新:

   5.21日 更新:有些机器上解屏之后会弹出【程序已运行...】的对话框,本来是想防止用户启动多次本程序,现在想想也就不必要啦..

    应网友们要求,解决了一些BUG,整个程序重新设计,全新的界面,并去除冗余代码,新增一些人性化的功能,例如:通过快捷键快速锁屏,系统空闲时锁屏。锁屏时关闭显示器等...

本想再加入手机远程锁屏和解屏功能,但对HTTP协议还不够熟悉,可能会花上好一段时间,为了我的作品尽善尽美就暂且放下了。

     在介绍新功能前,先感谢【寒栤ξ玄鉄ン QQ:7389187372】反馈 V2.0版本 在Win7下无法正常使用的问题以及屏蔽不了第三方桌面插件 如QQ桌面。关于这方面的BUG,由于个人原因,并没有去实验及分析并解决。V3.0 版本可能也不兼容Win7,至于第三方桌面插件也尚未测试过。锁屏小工具 V3.0 在Windows XP下测试通过。


谢谢 【寒栤ξ玄鉄ン QQ:7389178372】【爱~~徘徊~  QQ:13985874494】反馈的建议和意见

谢谢 【东东 QQ:99567177092】在 V3.0 版本中帮忙测试软件。

谢谢 【懒·。 wangmaokun1992@qq.com(113747741213)】、还有部分网友由于聊天记录不小心删除,所以有些网友并没有在列,也一并感。原本只是一个练习作品,没想到你们会喜欢,很谢谢你们的支持...



【注意】:由于本程序采用HOOK技术,可能会导致杀软的误杀及拦截,在使用本程序前请将其列入信任名单。



新增功能介绍:
            【密码提示】:好几个网友都是因为忘记密码而联系到我,而这个功能是【爱~~徘徊~  QQ:13985874494】提出的建议,觉得非常不错,就增加了整个功能,用于忘记了密码时可以根据自己设定的密码提示信息得到印象。感谢【爱~~徘徊~ 】o(∩_∩)o ~~
            【锁屏图像觉得搞笑,认为 V2.0 锁屏图片看,认为看,索性增加可以自由锁屏图片功能了。同时支持修改透明度。
            系统空闲锁屏】:想到可能网友经常离开自己电脑,但是不想自己电脑别人动,关机麻烦,虽然可以通过系统自带屏幕保护方式加锁,不够个性,增加功能,设定时间例如1分钟,电脑没有操作时间达到1分钟自动锁屏。可以同时勾选【锁屏时关闭显示功能,达到省点目的。通过快捷键 Ctrl + Alt + Shift + F9 隐藏窗口,这样不会占用桌面空间...觉得功能非常不错。
           锁屏关闭显示器顾名思义,锁屏时关闭显示器啦,其实不算关闭显示器,只是显示器处于休眠状态。
            【快速锁屏】:设置想过设置可以通过 Ctrl + Alt + Shift + F8 快捷键快速锁屏。一般设置密码,然后隐藏窗口,出去时候按一下快捷键立即锁屏。
            【隐藏窗口】:通过 Ctrl + Alt + Shift + F8 快捷键隐藏窗口

程序下载:
spxgjjxz.zip (271.66 KB, 下载次数: 29)


回复

举报

ID:146011 发表于 2016-11-3 22:50 | 显示全部楼层
我来看看
回复

举报

ID:146011 发表于 2016-11-3 23:01 | 显示全部楼层
锁屏小工具
回复

举报

ID:311041 发表于 2018-4-18 17:38 | 显示全部楼层
有个不情之请,您可以分享源码吗,想学习
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表