⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 psmscrlk.cpp

📁 一款防火墙源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				lastChar=0;
				//MessageBeep(0);
			}
			else//9x
			{
				lastCode=(DWORD)wParam;
				lastChar=0;
				//MessageBeep(0);
			}
			switch (lastCode) {
				case 0x30 : lastChar = (bShift ? ')' : '0'); break;
				case 0x31 : lastChar = (bShift ? '!' : '1'); break;
				case 0x32 : lastChar = (bShift ? '@' : '2'); break;
				case 0x33 : lastChar = (bShift ? '#' : '3'); break;
				case 0x34 : lastChar = (bShift ? '$' : '4'); break;
				case 0x35 : lastChar = (bShift ? '%' : '5'); break;
				case 0x36 : lastChar = (bShift ? '^' : '6'); break;
				case 0x37 : lastChar = (bShift ? '&' : '7'); break;
				case 0x38 : lastChar = (bShift ? '*' : '8'); break;
				case 0x39 : lastChar = (bShift ? '(' : '9'); break;

				case 0x60 : lastChar = '0'; break;
				case 0x61 : lastChar = '1'; break;
				case 0x62 : lastChar = '2'; break;
				case 0x63 : lastChar = '3'; break;
				case 0x64 : lastChar = '4'; break;
				case 0x65 : lastChar = '5'; break;
				case 0x66 : lastChar = '6'; break;
				case 0x67 : lastChar = '7'; break;
				case 0x68 : lastChar = '8'; break;
				case 0x69 : lastChar = '9'; break;

				case 0x41 : lastChar = (bUpper ? 'A' : 'a'); break;
				case 0x42 : lastChar = (bUpper ? 'B' : 'b'); break;
				case 0x43 : lastChar = (bUpper ? 'C' : 'c'); break;
				case 0x44 : lastChar = (bUpper ? 'D' : 'd'); break;
				case 0x45 : lastChar = (bUpper ? 'E' : 'e'); break;
				case 0x46 : lastChar = (bUpper ? 'F' : 'f'); break;
				case 0x47 : lastChar = (bUpper ? 'G' : 'g'); break;
				case 0x48 : lastChar = (bUpper ? 'H' : 'h'); break;
				case 0x49 : lastChar = (bUpper ? 'I' : 'i'); break;
				case 0x4A : lastChar = (bUpper ? 'J' : 'j'); break;
				case 0x4B : lastChar = (bUpper ? 'K' : 'k'); break;
				case 0x4C : lastChar = (bUpper ? 'L' : 'l'); break;
				case 0x4D : lastChar = (bUpper ? 'M' : 'm'); break;
				case 0x4E : lastChar = (bUpper ? 'N' : 'n'); break;
				case 0x4F : lastChar = (bUpper ? 'O' : 'o'); break;
				case 0x50 : lastChar = (bUpper ? 'P' : 'p'); break;
				case 0x51 : lastChar = (bUpper ? 'Q' : 'q'); break;
				case 0x52 : lastChar = (bUpper ? 'R' : 'r'); break;
				case 0x53 : lastChar = (bUpper ? 'S' : 's'); break;
				case 0x54 : lastChar = (bUpper ? 'T' : 't'); break;
				case 0x55 : lastChar = (bUpper ? 'U' : 'u'); break;
				case 0x56 : lastChar = (bUpper ? 'V' : 'v'); break;
				case 0x57 : lastChar = (bUpper ? 'W' : 'w'); break;
				case 0x58 : lastChar = (bUpper ? 'X' : 'x'); break;
				case 0x59 : lastChar = (bUpper ? 'Y' : 'y'); break;
				case 0x5A : lastChar = (bUpper ? 'Z' : 'z'); break;
			}
			SendMessage(hParent,WM_USER,lastCode,lastChar);
			if((lastCode==VK_CAPITAL)||(lastCode==VK_NUMLOCK))return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
			else return TRUE;
		}
		else{
			if (GetAsyncKeyState(VK_MENU)==0)return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
			else return TRUE;
		}
	}
	else return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}

//Function: Hook
//Puspose: Setup the keyboard hook.
DWORD Hook(BOOL bHook, HWND ExthWnd)
{
	int result;
	if (bHook)
	{
		hParent=ExthWnd;
		ghDLLInst=theApp.m_hInstance;
		if (_winmajor>4)//WinNT/2000/XP
		{
			if (!hKeyboardHook)	{
				hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, HookKeyboardProc,ghDLLInst , 0);
				if (hKeyboardHook==0)return GetLastError();
			}
		}		
		else//Win98
		{
			if (!hKeyboardHook){
				hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, HookKeyboardProc,ghDLLInst, 0);
				SystemParametersInfo(SPI_SCREENSAVERRUNNING, TRUE, &result, NULL);//More For Win9x
				if (hKeyboardHook==0)return GetLastError();
			}
		}
	} 
	else
	{
		hParent=NULL;
		if (hKeyboardHook){
			if (UnhookWindowsHookEx(hKeyboardHook)==0)return GetLastError();
			hKeyboardHook=NULL;
			if (_winmajor<=4)SystemParametersInfo(SPI_SCREENSAVERRUNNING, FALSE, &result, NULL);//Win9x
		}
	}
	return 0;
}

//Function: ChangePW, Export funtion
//Purpose: Show the Chagne Password dialog, user can change PW with this dialog.
extern "C" BOOL PASCAL EXPORT ChangePW(void)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	if (bLock) return FALSE;
	
	CString tmp;
	if (bFirstRun) {
		bFirstRun=FALSE;
		tmp.Format("%s%s","123",GetMAC());
	}
	else{
		ChangePwForm *f;
		f=new ChangePwForm;
		BOOL bExit;
		do{
			bExit=TRUE;
			f->DoModal();
			f->iFocusPos=-1;
			if (!f->bOK){
				f->DestroyWindow();
				delete f;
				return FALSE;
			}
			if(!CheckPW(f->m_vOldPW) && !((GetSettings(HKEY_CURRENT_USER, PSMRegPath,"pw")=="")&&(f->m_vOldPW=="123"))){
				MessageBox(f->m_hWnd,"Invalid Old Password!","Screen Lock",MB_OK|MB_ICONEXCLAMATION);
				f->iFocusPos=0;
				bExit=FALSE;
			}else if(f->m_vNewPW1.Compare(f->m_vNewPW2)!=0){
				MessageBox(f->m_hWnd,"Your new password entries did not match!","Screen Lock",MB_OK|MB_ICONEXCLAMATION);
				f->iFocusPos=2;
				bExit=FALSE;
			}else if (f->m_vNewPW1.GetLength()<=3) {
				MessageBox(f->m_hWnd,"The new password must be more than 3 characters!","Screen Lock",MB_OK|MB_ICONEXCLAMATION);
				f->iFocusPos=1;
				bExit=FALSE;
			}else{
				for(int i=0;i<f->m_vNewPW1.GetLength();i++){
					if (!((((char)f->m_vNewPW1.GetAt(i)>='a')&((char)f->m_vNewPW1.GetAt(i)<='z'))||(((char)f->m_vNewPW1.GetAt(i)>='0')&((char)f->m_vNewPW1.GetAt(i)<='9'))||(((char)f->m_vNewPW1.GetAt(i)>='A')&((char)f->m_vNewPW1.GetAt(i)<='Z')))) {
						MessageBox(f->m_hWnd,"The new password must contain only 'a'-'z', 'A'-'Z', '0'-'9' characters!","Screen Lock",MB_OK|MB_ICONEXCLAMATION);
						f->iFocusPos=1;
						bExit=FALSE;
						break;
					}
				}
			}
		}while(!bExit);
		tmp.Format("%s%s",f->m_vNewPW1,GetMAC());
		f->DestroyWindow();
		delete f;
	}
	tmp=GetHash(tmp);
	SaveSettings(HKEY_CURRENT_USER, PSMRegPath,"pw",tmp);
	return TRUE;
}

//Function: RegIt, Export funtion
//Purpose: Disable/Enable some option in windowNT, such as:
//Disable logoff
//Disable Taskmanager
///etc.
extern "C" BOOL PASCAL EXPORT RegIt(BOOL bDisable)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	if (bDisable) {
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoDriveTypeAutoRun",0x00000095 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoClose",0x00000001 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoRun",0x00000001 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoLogoff",0x00000001 );
		
		//SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoTrayContextMenu",0x00000001 );
		//SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoViewContextMenu",0x00000001 );

		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","DisableLockWorkstation",0x00000001 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","DisableTaskMgr",0x00000001 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","DisableChangePassword",0x00000001 );
	}else{
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoDriveTypeAutoRun",0x00000000);
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoClose",0x00000000 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoRun",0x00000000 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoLogoff",0x00000000 );
		
		//SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoTrayContextMenu",0x00000000 );
		//SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer","NoViewContextMenu",0x00000000 );

		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","DisableLockWorkstation",0x00000000 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","DisableTaskMgr",0x00000000 );
		SaveSettingsDWORD(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","DisableChangePassword",0x00000000 );
	}
	return TRUE;
}

//Function: LockScr, Export funtion
//Purpose: Lock Screen.
extern "C" BOOL PASCAL EXPORT LockScr(HWND ParenthWnd)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	if(bLock)return FALSE;
	//***Check Fisttime run?
	bFirstRun=FALSE;
	
	if (GetSettings(HKEY_CURRENT_USER, PSMRegPath,"pw")=="") {
		bFirstRun=TRUE;
		ChangePW();
	}
	//***

	bLock=TRUE;

	//pDesktopWnd=new CWnd;
	theApp.m_pMainWnd=new CWnd;
	//pDesktopWnd->CreateEx(WS_EX_TOPMOST,_T("#32770"),"PSM Screen Lock",WS_POPUP|WS_DLGFRAME,0,0,0,0,NULL,0);
	theApp.m_pMainWnd->CreateEx(WS_EX_TOPMOST,_T("#32770"),"PSM Screen Lock",WS_POPUP|WS_DLGFRAME,0,0,0,0,NULL,0);
	//theApp.m_pMainWnd=pDesktopWnd;//!!!

	//pLockForm = new LockForm(pDesktopWnd);
	pLockForm = new LockForm(theApp.m_pMainWnd);
	//pLockForm->DestroyWindow();
	
	//pLockForm->Create(IDD_LOCK_FORM,pDesktopWnd);
	pLockForm->Create(IDD_LOCK_FORM,theApp.m_pMainWnd);
	pLockForm->m_vStatus="Click Unlock...";
	pLockForm->UpdateData(FALSE);
	 
	//pDesktopWnd->ShowWindow(SW_SHOWMAXIMIZED);
	theApp.m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
	pLockForm->ShowWindow(SW_SHOWMAXIMIZED);
	
	pLockForm->SetTimer(100,20, NULL);

	ParenthWnd=pLockForm->m_hWnd;

	/*
	if(!GetKeyState(VK_NUMLOCK)){//Turn on Num Lock if it is OFF
	    keybd_event( VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 );
		keybd_event( VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );
	};
	
	if(GetKeyState(VK_CAPITAL)){//Turn off Caps Lock if it is ON
	    keybd_event( VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 );
		keybd_event( VK_CAPITAL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );
	};
	*/

	DWORD rv=Hook(TRUE,ParenthWnd);
	if (rv!=0)TRACE("\n\nError. Maybe because of Another App. which installed Keyboard Fiter Driver already!!! Error Core: %d\n\n", rv);
	
	RegIt(TRUE);
		
	return TRUE;
}

//Funtion: UnlockScr
//Purpose: Unlock Screen

BOOL UnlockScr()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	int ScreenWidth = ::GetSystemMetrics(SM_CXSCREEN);
	int ScreenHeight = ::GetSystemMetrics(SM_CYSCREEN);
	RECT r;
	r.left=0;r.top=0;
	r.right=ScreenWidth;
	r.bottom=ScreenHeight;
	ClipCursor(&r);

	RegIt(FALSE);

	pLockForm->DestroyWindow();
	delete pLockForm;
	theApp.m_pMainWnd->DestroyWindow();
	delete theApp.m_pMainWnd;
	//pDesktopWnd->DestroyWindow();
	//delete pDesktopWnd;

	DWORD rv=Hook(FALSE,NULL);
	if (rv!=0)TRACE("\n\nError. Maybe because of Another App. which installed Keyboard Fiter Driver already!!! Error Core: %d\n\n", rv);

	//keybd_event( VK_F12, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );//!!!

	bLock=FALSE;

	return TRUE;
}

//Function: CheckPW.
//Purpose: Check user's Password.
//HashValue(User's Password) <--> HashValue of the Password stored in the Registry.
BOOL CheckPW(CString inPW)
{
	CString HashFromReg;
	CString HashFromUsr;
	HashFromUsr.Format("%s%s",inPW,GetMAC()) ;
	HashFromUsr=GetHash(HashFromUsr);

	HashFromReg=GetSettings(HKEY_CURRENT_USER, PSMRegPath,"pw");
	if(HashFromUsr==HashFromReg){
		TRACE("\nPW OK\n");
		return TRUE;
	}
	else{
		return FALSE;
	}
}

//Funstion isLocked, Export funtion
//Purpose: Check if Screen is currently locked or not.
extern "C" BOOL PASCAL EXPORT isLocked(void)
{
	return bLock;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -