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

📄 clientdlg.cpp

📁 网吧管理系统VC源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	DFile.Close();
	
	m_commSocket.Close();
	m_commSocket.Create();
	m_commSocket.Connect(strServerIp, 6810);
	
	m_Msg.code = CLIENT_IP_SEND;
	m_commSocket.Send(&m_Msg, sizeof(SMessage));
	return TRUE;
}

//服务器发出信号,解锁客户端上网
LRESULT CClientDlg::OnStartWork(WPARAM wParam, LPARAM lParam)
{
	if (IsWIN32_NT()) 
		::UnhookWindowsHookEx(glhHook);
	else
	{
		SystemParametersInfo(SPI_SCREENSAVERRUNNING, FALSE, NULL,0);		//AfxMessageBox("glhHook is not NULL!");
		HideProcess();
	}

	ShowDeskWnd();
	//将应用程序放入任务栏右下处
	pnid.cbSize = sizeof(NOTIFYICONDATA);
	pnid.hIcon = LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDR_MAINFRAME));
	pnid.hWnd = m_hWnd;
	pnid.uCallbackMessage = WM_SYSTRAY;
	pnid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	pnid.uID = ID_SYSTRAY;
	sprintf(pnid.szTip, "客户端程序");
	Shell_NotifyIcon(NIM_ADD, &pnid);
	ShowWindow(SW_HIDE);
	ClipCursor(0);
	return true;
}

//锁定客户端
LRESULT CClientDlg::OnLockWindow(WPARAM wParam, LPARAM lParam)
{
	LockWindow();
	return true;
}


//会员结账后,显示会员余额
LRESULT CClientDlg::OnLeaguerCheckOut(WPARAM wParam, LPARAM lParam)
{
	SMessage* pMsg = (SMessage*) lParam;
	CString str = CString(pMsg->msg);
	KillTimer(1);
	LockWindow();
	AfxMessageBox("你的会员卡中余额为  " + str + "  元", MB_ICONINFORMATION | MB_OK);
	return true;
}


//非会员,不能结账
LRESULT CClientDlg::OnNotCheckOut(WPARAM wParam, LPARAM lParam)
{
	KillTimer(1);
	AfxMessageBox("你不是会员,不能在客户端结帐!", MB_ICONINFORMATION | MB_OK);
	return true;
}


//显示会员信息
LRESULT CClientDlg::OnDisplayLeaguerInformation(WPARAM wParam, LPARAM lParam)
{
	SMessage* pMsg = (SMessage*) lParam;
	CString str = CString(pMsg->msg);
	AfxMessageBox("你的会员卡中余额为" + str + "元", MB_OK | MB_ICONINFORMATION);
	return true;
}


//锁定屏幕
void CClientDlg::LockWindow()
{
	ShowWindow(SW_SHOWDEFAULT);
	
    if (IsWIN32_NT()) 
		glhHook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc,(HINSTANCE)AfxGetApp()->m_hInstance,0);
	else
	{
		SystemParametersInfo(SPI_SCREENSAVERRUNNING, TRUE, NULL,0);
	}
	
	BringWindowToTop();
	CenterWindow();
	SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | WS_EX_TOPMOST);
	CRect rect;
	GetWindowRect(&rect);
    //ClipCursor(&rect);
	Shell_NotifyIcon(NIM_DELETE, &pnid);
}


void CClientDlg::OnTimer(UINT nIDEvent) 
{
	if (nIDEvent == 4) //发送确认信息,使服务器检测客户端正常运行
	{
		SMessage m_Msg;
		if (!IsWIN32_NT()) 
		{
			DWORD length = 256;
			char* strName = new char[length];
			GetComputerName(strName, &length);
			strcpy(m_Msg.msg, strName);
		}
		else
			gethostname(m_Msg.msg, 255);	

		m_Msg.code = CLIENT_CONFIRM_INFORMATION;
		m_commSocket.Send(&m_Msg, sizeof(SMessage));
	}
	//结帐不成功
	else if (nIDEvent == 1)
	{
		AfxMessageBox("结帐不成功,请到服务台结帐,谢谢合作!", MB_ICONINFORMATION | MB_OK);
		KillTimer(1);
	}
	CDialog::OnTimer(nIDEvent);
}


BOOL CClientDlg::PreTranslateMessage(MSG* pMsg) 
{
	UpdateData(true);
	if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)  
	{ 
		if(pMsg->wParam==VK_ESCAPE)// || pMsg->wParam==VK_RETURN)
			return true;

		if(pMsg->wParam==VK_RETURN && this->m_CardID == "" && m_AdminPassWord == "")   
		{
			return true;	
		}
	}
	if (pMsg->message == 161) //移动窗口
		return true;
	return CDialog::PreTranslateMessage(pMsg);
}


//管理员解锁上网
void CClientDlg::OnAdminButtonUnlock() 
{
	UpdateData(true);
	
	m_AdminPassWord.TrimRight();
	m_AdminPassWord.TrimLeft();
	if(m_AdminPassWord == "")
		return;

	SMessage pMsg;
	if (!IsWIN32_NT()) 
	{
		DWORD length = 256;
		char* strName = new char[length];
		GetComputerName(strName, &length);
		strcpy(pMsg.msg, strName);
	}
	else
		gethostname(pMsg.msg, 255);	
	
	strcpy(pMsg.cardID, "");
	strcpy(pMsg.cardPass, this->m_AdminPassWord);
	pMsg.code = CLIENT_ADMIN_PASS;
    m_commSocket.Send(&pMsg, sizeof(SMessage));

	this->m_AdminPassWord.Empty();
	GetDlgItem(IDC_EDIT_ADMIN_PWD)->SetFocus();
	UpdateData(false);
}


//显示使用信息
LRESULT CClientDlg::OnTimeReport(WPARAM wParam, LPARAM lParam)
{
	SMessage* pMsg = (SMessage*) lParam;
	MessageBox(pMsg->msg, "提示信息", MB_OK | MB_ICONINFORMATION);
	return true;
}


//重新启动客户端机器
LRESULT CClientDlg::OnReSet(WPARAM wParam, LPARAM lParam)
{
    //如果是NT/2000下需先设置相关权限
    if (IsWIN32_NT()) 
	 {
       HANDLE handle;
       TOKEN_PRIVILEGES tkp;

       OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &handle);
       LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);

       tkp.PrivilegeCount = 1;  // one privilege to set    
       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
 
       AdjustTokenPrivileges(handle, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
	 }
	 //WIN98下关机或注销时可直接调用下面涵数既可
	::ExitWindowsEx(EWX_REBOOT | EWX_FORCE,0);
	return true;
}


//关闭客户端机器
LRESULT CClientDlg::OnShutDown(WPARAM wParam, LPARAM lParam)
{
	//如果是NT/2000下需先设置相关权限
    if (IsWIN32_NT()) 
	{
       HANDLE handle;
       TOKEN_PRIVILEGES tkp;

       OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &handle);
       LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);

       tkp.PrivilegeCount = 1;  // one privilege to set    
       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
 
       AdjustTokenPrivileges(handle, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
	}
	 //WIN98下关机或注销时可直接调用下面涵数既可
	::ExitWindowsEx(EWX_SHUTDOWN  | EWX_FORCE,0);
	return true;
}


//隐藏桌面及任务栏
void CClientDlg::HideDeskWnd()
{
    CWnd* pDeskWnd, *pTaskWnd;
	pDeskWnd = FindWindow("Progman", NULL);//获取桌面窗口句柄
    pDeskWnd->ShowWindow(SW_HIDE); //隐藏桌面
    
    pTaskWnd = FindWindow("Shell_TrayWnd", NULL);//获取任务栏句柄
    pTaskWnd->ShowWindow(SW_HIDE); //隐藏任务栏
}


//显示服务器发送给客户端的消息
LRESULT CClientDlg::OnDisplayMessage(WPARAM wParam, LPARAM lParam)
{
	SMessage* pMsg = (SMessage*)lParam;
	AfxMessageBox(pMsg->msg, MB_OK | MB_ICONINFORMATION);
	return true;
}


//钩子函数
LRESULT  CALLBACK  LowLevelKeyboardProc(int  nCode,  WPARAM  wParam,  LPARAM  lParam)  
{  
	bool fEatKeystroke = false;  
	if (nCode == HC_ACTION)    
	{  
		KBDLLHOOKSTRUCT *p  =  (KBDLLHOOKSTRUCT*)lParam;  
		switch  (wParam)    
		{  
			case  WM_KEYDOWN:    
			case  WM_SYSKEYDOWN:  
			case  WM_KEYUP:          
			case  WM_SYSKEYUP:  
				//屏蔽左开始键  
				if(p->vkCode  ==  VK_LWIN) 
					  fEatKeystroke = true;

				//屏蔽右开始键
				 if(p->vkCode  ==  VK_RWIN) 
					  fEatKeystroke = true;

                //屏蔽Alt+F4键 
				 if((p->vkCode == VK_F4) && ((p->flags & LLKHF_ALTDOWN) != 0)) 
				      fEatKeystroke = true;

                //屏蔽Alt+Tab键
                 if((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) 
				      fEatKeystroke = true;

				//屏蔽Alt+ESC开始键
                 if((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) 
				      fEatKeystroke = true;

				//屏蔽ESC键
			     if(p->vkCode == VK_ESCAPE) 
				      fEatKeystroke = true;

				//屏蔽ESC+Ctrl键
                 if((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0)) 
				      fEatKeystroke = true;

				//屏蔽Ctrl+Alt+Del键
				 if((p->vkCode == VK_DELETE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0) && ((GetKeyState(VK_MENU) & 0x8000) != 0))
				  {
					  fEatKeystroke = true;
				  }
                  break;  
		}
	}
 	return (fEatKeystroke ? true:CallNextHookEx(glhHook,nCode,wParam,lParam));  
}



BOOL CClientDlg::HideProcess()
{
	HINSTANCE hInst = GetModuleHandle("Kernel32.DLL"); 
	if(hInst) 
	{
		typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
		MYFUNC RegisterServiceProcessFun = NULL;
		RegisterServiceProcessFun = (MYFUNC)GetProcAddress(GetModuleHandle("kernel32.dll"), "RegisterServiceProcess");
		if(!RegisterServiceProcessFun)
		{
			FreeLibrary(hInst);
			//AfxMessageBox("UnGetProcess");
			return FALSE;
		}
		RegisterServiceProcessFun(GetCurrentProcessId(),1);
		FreeLibrary(hInst);
		return TRUE;
	}
	return FALSE;
}


//显示桌面及任务栏
void CClientDlg::ShowDeskWnd()
{
    CWnd* pDeskWnd, *pTaskWnd;
	pDeskWnd = FindWindow("Progman", NULL);//获取桌面窗口句柄
    pTaskWnd = FindWindow("Shell_TrayWnd", NULL);//获取任务栏句柄

    pDeskWnd->ShowWindow(SW_SHOW); //显示桌面
    pTaskWnd->ShowWindow(SW_SHOW); //显示任务栏
}


//加密函数
CString CClientDlg::EncryptText(CString strText)
{
	char *KeyWords[] = {"%$<]A", "45B%c{", "AcFag^*", "<[/\09L!", "#$@86127&j",
				   ",:.zxy?|\\+", "-ab43.B<>}]", "&QwfghmA$@#*", "*$%fFE@><?.,i",
				   "FEadeef#&^%>*(", "KIeS|+)&^ie2289"
	};
	int strLength = strText.GetLength();
	char  strBuff[15];
	CString strPassword;
	int Ascii;

	for(int i = 0; i < strLength; i++)
	{
		char temp = strText.GetAt(i);
		Ascii = temp;
		char c = KeyWords[strLength - 5][(i % strLength) + 1];
        Ascii = Ascii + c;
        strBuff[i] = (Ascii & 0xffff);
	}
	strBuff[i] = '\0';
	strPassword = strBuff;
	return strPassword;
}


void CClientDlg::OnClose() 
{
	
}


BOOL CClientDlg::IsWIN32_NT()
{
	OSVERSIONINFO oi;
    oi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&oi);
    if (oi.dwPlatformId == VER_PLATFORM_WIN32_NT) 
		return true;
	else
		return false;
}

⌨️ 快捷键说明

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