📄 psmscrlk.cpp
字号:
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 + -