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