📄 maindlg.cpp
字号:
(*info)->ServerVersion = *(WORD *)(rs->Information);
break;
case QUERY_ENDQUERY:
default:
return;
}
rs = (PQUERY_RESULTSET)((char *)rs + sizeof(QUERY_RESULTSET) + rs->InformationLength);
}
}
bool CMainDlg::TestLockedStatus(int lock)
{
if (lock == LOCKED_STATUS_NONSUPPORT)
{
MessageBox("服务端版本不支持,请点击[升级服务端]进行升级", "错误", MB_ICONERROR);
return false;
}
if (lock == LOCKED_STATUS_NEEDPWD)
{
BOOL bHandled = FALSE;
OnSetPassword(0, 0, NULL, bHandled);
return false;
}
if (lock != LOCKED_STATUS_NONE)
{
MessageBox("控制端口占用中,请稍候……", "错误", MB_ICONERROR);
return false;
}
return true;
}
LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nItem = m_hWndList.GetSelectedIndex();
if (nItem == -1)
{
MessageBox("选择要连接的主机", "提示", MB_ICONINFORMATION);
return 0;
}
PHOST_LIST_LINK p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (TestLockedStatus(p->Lock) == false)
return 0;
PWND_INIT_PARAM pwip = new WND_INIT_PARAM;
pwip->lpCtrlHandle = p;
pwip->hConnMgrWnd = m_hWnd;
PostThreadMessage(_Module.m_dwMainThreadID, WM_USER, 0, (LPARAM)pwip);
return 0;
}
LRESULT CMainDlg::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CloseDialog(wID);
return 0;
}
LRESULT CMainDlg::OnAddHost(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CInputDlg<IDD_CONNECTTO> dlg;
TCHAR ip[INPUT_BUFFER_SIZE];
USHORT port = 24704;
static TCHAR szLastAddHost[INPUT_BUFFER_SIZE] = "127.0.0.1:24704";
if (dlg.DoModal(m_hWnd, (LPARAM)szLastAddHost) == TRUE)
{
strcpy(ip, szLastAddHost);
char *p = strchr(ip, ':');
if (p != NULL)
{
*p = '\0';
port = atoi(p + 1);
}
AddHost(ip, port);
}
return 0;
}
LRESULT CMainDlg::OnSetPassword(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nItem = m_hWndList.GetSelectedIndex();
if (nItem == -1)
{
MessageBox("选择要[设置密码]的主机", "提示", MB_ICONINFORMATION);
return 0;
}
CInputDlg<IDD_SETPASSWORD> dlg;
TCHAR pwd[INPUT_BUFFER_SIZE] = "";
if (dlg.DoModal(m_hWnd, (LPARAM)pwd) == FALSE)
return 0;
PHOST_LIST_LINK p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
memset(p->Password, 0, sizeof(p->Password));
MD5_CTX context;
MD5Init(&context);
MD5Update(&context, (BYTE *)pwd, strlen(pwd));
MD5Final((BYTE *)p->Password, &context);
p->Password[0] = 86;
p->Password[4] = 29;
p->Password[8] = 91;
if (p->Type == 1 && p->Sock == INVALID_SOCKET)
ConnectSlave(p->Address, p->Port, 1);
else
{
int temp = CONTROL_QUERYINFO;
SimplySendPack(p->Sock, (char *)&temp, sizeof(temp));
p->Lock = LOCKED_STATUS_QUERY;
}
return 0;
}
LRESULT CMainDlg::OnExitService(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nItem = m_hWndList.GetSelectedIndex();
if (nItem == -1)
{
MessageBox("选择要[关闭服务端]的主机", "提示", MB_ICONINFORMATION);
return 0;
}
PHOST_LIST_LINK p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (TestLockedStatus(p->Lock) == false)
return 0;
CString msg, str = "";
if (p->Info->OffsetOfComputerName != 0)
str.Format(" (%s)", (char *)(p->Info) + p->Info->OffsetOfComputerName);
msg.Format("确定要关闭主机 %s%s 的服务端吗?", inet_ntoa(p->Address), str);
if (MessageBox(msg, "警告", MB_ICONWARNING | MB_YESNO) != IDYES)
return 0;
if (p->Type == 1 && p->Sock == INVALID_SOCKET)
{
REQUEST_CONNECT rc;
rc.dwWorkType = CONTROL_EXIT;
rc.funBack = CloseContrlSock;
rc.lpParam = NULL;
rc.hAcceptWnd = NULL;
rc.lpCtrlHandle = p;
SendMessage(WM_REQUEST_CONNECT, 0, (LPARAM)&rc);
}
else
{
int temp = CONTROL_EXIT;
SimplySendPack(p->Sock, (char *)&temp, sizeof(temp));
}
return 0;
}
LRESULT CMainDlg::OnShutdown(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nItem = m_hWndList.GetSelectedIndex();
if (nItem == -1)
{
MessageBox("选择要[关闭]的主机", "提示", MB_ICONINFORMATION);
return 0;
}
PHOST_LIST_LINK p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (TestLockedStatus(p->Lock) == false)
return 0;
CString msg, str = "";
if (p->Info->OffsetOfComputerName != 0)
str.Format(" (%s)", (char *)(p->Info) + p->Info->OffsetOfComputerName);
msg.Format("确定要[关闭]主机 %s%s ?", inet_ntoa(p->Address), str);
if (MessageBox(msg, "警告", MB_ICONWARNING | MB_YESNO) != IDYES)
return 0;
if (p->Type == 1 && p->Sock == INVALID_SOCKET)
{
REQUEST_CONNECT rc;
rc.dwWorkType = CONTROL_SHUTDOWN;
rc.funBack = CloseContrlSock;
rc.lpParam = NULL;
rc.hAcceptWnd = NULL;
rc.lpCtrlHandle = p;
SendMessage(WM_REQUEST_CONNECT, 0, (LPARAM)&rc);
}
else
{
int temp = CONTROL_SHUTDOWN;
SimplySendPack(p->Sock, (char *)&temp, sizeof(temp));
}
return 0;
}
LRESULT CMainDlg::OnReboot(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nItem = m_hWndList.GetSelectedIndex();
if (nItem == -1)
{
MessageBox("选择要[重启]的主机", "提示", MB_ICONINFORMATION);
return 0;
}
PHOST_LIST_LINK p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (TestLockedStatus(p->Lock) == false)
return 0;
CString msg, str = "";
if (p->Info->OffsetOfComputerName != 0)
str.Format(" (%s)", (char *)(p->Info) + p->Info->OffsetOfComputerName);
msg.Format("确定要[重启]主机 %s%s ?", inet_ntoa(p->Address), str);
if (MessageBox(msg, "警告", MB_ICONWARNING | MB_YESNO) != IDYES)
return 0;
if (p->Type == 1 && p->Sock == INVALID_SOCKET)
{
REQUEST_CONNECT rc;
rc.dwWorkType = CONTROL_REBOOT;
rc.funBack = CloseContrlSock;
rc.lpParam = NULL;
rc.hAcceptWnd = NULL;
rc.lpCtrlHandle = p;
SendMessage(WM_REQUEST_CONNECT, 0, (LPARAM)&rc);
}
else
{
int temp = CONTROL_REBOOT;
SimplySendPack(p->Sock, (char *)&temp, sizeof(temp));
}
return 0;
}
LRESULT CMainDlg::OnUpdate(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nItem = m_hWndList.GetSelectedIndex();
if (nItem == -1)
{
MessageBox("选择要[更新服务端]的主机", "提示", MB_ICONINFORMATION);
return 0;
}
PHOST_LIST_LINK p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (TestLockedStatus(p->Lock) == false)
return 0;
MessageBox("这个功能还没做好呢!", "提示", MB_ICONINFORMATION);
return 0;
}
LRESULT CMainDlg::OnUninstall(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
int nItem = m_hWndList.GetSelectedIndex();
if (nItem == -1)
{
MessageBox("选择要[卸载服务端]的主机", "提示", MB_ICONINFORMATION);
return 0;
}
PHOST_LIST_LINK p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (TestLockedStatus(p->Lock) == false)
return 0;
MessageBox("不要乱点呀!", "提示", MB_ICONINFORMATION);
return 0;
}
LRESULT CMainDlg::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CAboutDlg dlg;
dlg.DoModal();
return 0;
}
LRESULT CMainDlg::OnServerConfig(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CServerConfig dlg;
dlg.DoModal();
return 0;
}
LRESULT CMainDlg::OnLocalConfig(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
CLocalConfig dlg;
dlg.DoModal();
return 0;
}
void CMainDlg::CloseDialog(int nVal)
{
DestroyWindow();
::PostQuitMessage(nVal);
while (m_host != NULL)
{
PHOST_LIST_LINK p = m_host;
m_host = m_host->Next;
if (p->Sock != INVALID_SOCKET)
closesocket(p->Sock);
if (p->Info != NULL)
delete [] p->Info;
delete p;
}
}
LRESULT CMainDlg::OnHostList(int /*wParam*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/)
{
NMLISTVIEW *pNMListView = (NMLISTVIEW *)pNMHDR;
PHOST_LIST_LINK p;
int nItem = pNMListView->iItem;
switch (pNMHDR->code)
{
case NM_DBLCLK:
if (nItem >= 0 && nItem < m_hWndList.GetItemCount())
{
p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (TestLockedStatus(p->Lock) == false)
break;
PWND_INIT_PARAM pwip = new WND_INIT_PARAM;
pwip->lpCtrlHandle = p;
pwip->hConnMgrWnd = m_hWnd;
PostThreadMessage(_Module.m_dwMainThreadID, WM_USER, 0, (LPARAM)pwip);
}
break;
case LVN_ITEMCHANGED:
if (nItem == -1)
{
SetDlgItemText(IDC_SYSTEMNAME, "n/a");
SetDlgItemText(IDC_PHYSMEMORYSIZE, "n/a");
SetDlgItemText(IDC_PROCESSORNAME, "n/a");
SetDlgItemText(IDC_CURRENTUSER, "n/a");
SetDlgItemText(IDC_SYSTEMROOT, "n/a");
}
else
{
p = (PHOST_LIST_LINK)m_hWndList.GetItemData(nItem);
if (p->Info != NULL)
{
if (p->Info->OffsetOfSystemName != 0)
SetDlgItemText(IDC_SYSTEMNAME, (char *)(p->Info) + p->Info->OffsetOfSystemName);
if (p->Info->OffsetOfMemorySize != 0)
SetDlgItemText(IDC_PHYSMEMORYSIZE, (char *)(p->Info) + p->Info->OffsetOfMemorySize);
if (p->Info->OffsetOfProcessorName != 0)
SetDlgItemText(IDC_PROCESSORNAME, (char *)(p->Info) + p->Info->OffsetOfProcessorName);
if (p->Info->OffsetOfCurrentUserName != 0)
SetDlgItemText(IDC_CURRENTUSER, (char *)(p->Info) + p->Info->OffsetOfCurrentUserName);
if (p->Info->OffsetOfRootDirectory != 0)
SetDlgItemText(IDC_SYSTEMROOT, (char *)(p->Info) + p->Info->OffsetOfRootDirectory);
}
else
{
SetDlgItemText(IDC_SYSTEMNAME, "n/a");
SetDlgItemText(IDC_PHYSMEMORYSIZE, "n/a");
SetDlgItemText(IDC_PROCESSORNAME, "n/a");
SetDlgItemText(IDC_CURRENTUSER, "n/a");
SetDlgItemText(IDC_SYSTEMROOT, "n/a");
}
}
break;
}
return 0;
}
bool CMainDlg::OpenListenSock()
{
m_ListenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_ListenSock == INVALID_SOCKET)
{
MessageBox("socket() failed");
return false;
}
struct sockaddr_in local;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -