用VC sdk实现屏幕锁定程序
用VC sdk实现屏幕锁定程序,锁定键盘,鼠标,自动关闭任务管理器,只有输入按键与D:\password.txt内容相同时,才可以解锁。
当你离开计算机时,运行程序即可锁定屏幕键盘。
主要代码如下:
首先安装全局钩子:
case WM_CREATE: //mouse hook SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 0); g_hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)Mouse_llHookProc, g_hInstance, NULL); g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)Keyboard_llHookProc, g_hInstance, NULL); g_uTimer=::SetTimer(hwnd,1,50,NULL);//创建定时器 s_hMutex = CreateMutexW(0, TRUE, L"My Mutex"); break;
关闭任务管理器进程,当D:\password.txt的内容g_szPassword与输入的密码g_szKeyPassword相同时,退出程序。
case WM_TIMER: { hTaskMan=::FindWindow("#32770","Windows 任务管理器"); ::SendMessage(hTaskMan,WM_CLOSE,0,0); ::SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE); UINT uID=wParam; if(uID==1) { if(strcmp(g_szPassword,g_szKeyPassword)==0) { ::SendMessage(hwnd,WM_CLOSE,0,0); } } break; }
键盘钩子回调函数,通过GetKeyState(VK_CAPITAL)&0x0001判断大写锁定键的状态,
LRESULT CALLBACK Keyboard_llHookProc(int nCode,WPARAM wParam,LPARAM lParam) { if(GetKeyState(VK_CAPITAL)&0x0001) { g_bCapslock=TRUE; } else { g_bCapslock=FALSE; } PKBDLLHOOKSTRUCT pKhs; pKhs=(PKBDLLHOOKSTRUCT)lParam; int iState=0; int iLen=0; if(wParam==WM_KEYDOWN) { if(pKhs->vkCode>64 && pKhs->vkCode<91)//从A到Z { iLen=strlen(g_szKeyPassword); if(g_bCapslock) g_szKeyPassword[iLen]=(char)pKhs->vkCode; else g_szKeyPassword[iLen]=(char)(pKhs->vkCode+32); return TRUE; } else if(pKhs->vkCode>47 && pKhs->vkCode<58)//从0到9 { int iLen; iLen=strlen(g_szKeyPassword); g_szKeyPassword[iLen]=(char)pKhs->vkCode; return TRUE; } else if(pKhs->vkCode==0x8)//退格键 { memset(g_szKeyPassword,'\0',64); return TRUE; } } return TRUE; }