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

📄 maindlg.cpp

📁 远程控制系统,可以实现局域网内进行远程控制计算机,很方便,并且是学习用的非常好的资料.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			(*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 + -