用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;
}