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

📄 syscontrol.cpp

📁 监控应用程序
💻 CPP
字号:
// SysControl.cpp: implementation of the SysControl class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "WatchDogByll.h"
#include "SysControl.h"
#include "tlhelp32.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

SysControl::SysControl()
{
	reWriteReg='Y';
	IsWinVisible='Y';
	memset(exePath,0x00,sizeof(exePath));
	memset(killExeName,0x00,sizeof(killExeName));
	InitSysControl();
}

SysControl::~SysControl()
{
	if(m_Mutex)
	{
		CloseHandle(m_Mutex);
		m_Mutex=NULL;
	}
	if(m_hUser32!=NULL)
	{
		::FreeLibrary(m_hUser32);
		m_hUser32=NULL;
	}
}

bool SysControl::InitSysControl()
{
	GetPrivateProfileString("MAIN_CONF","EXEPATH","",exePath,sizeof(exePath),".\\CONFIGURE.ini");
	GetPrivateProfileString("MAIN_CONF","KILLEXENAME","",killExeName,sizeof(killExeName),".\\CONFIGURE.ini");

	if(m_hUser32==NULL)
		m_hUser32=GetModuleHandle("USER32.DLL");
	if(m_hUser32)
	{
		m_IsHungNT=(HUNG_FUNNT)GetProcAddress(m_hUser32,"IsHungAppWindow");
		m_IsHung9X=(HUNG_FUN9X)GetProcAddress(m_hUser32,"IsHungThread");
	}
	return true;
}

bool SysControl::IsWinNT()
{
	//判断操作系统类型
	OSVERSIONINFO OSVersionInfo;
	OSVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
	GetVersionEx(&OSVersionInfo);
	//如果是Win NT/2000操作系统
	if(OSVersionInfo.dwPlatformId==VER_PLATFORM_WIN32_NT)
		return true;
	return false;
}

bool SysControl::IsUniqueProc()
{
	if((m_Mutex=CreateMutex(NULL,TRUE,"System Watch Dog"))==0)
	{
		MessageBox(NULL,"已经有一个WatchDog进程在运行","Error",MB_OK);
		return false;
	}
	if(GetLastError()==ERROR_ALREADY_EXISTS)
	{
		MessageBox(NULL,"已经有一个WatchDog进程在运行","Error",MB_OK);
		return false;
	}
	return true;
}

BOOL SysControl::RestartComputer()
{
	//如果是Win NT/2000系统
	if(IsWinNT())
	{
		//在Win NT/2000下赋予关闭系统的权限
		static HANDLE hToken;
		static TOKEN_PRIVILEGES tp;
		static LUID luid;
		::OpenProcessToken(GetCurrentProcess(),
			TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
		::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
		tp.PrivilegeCount=1;
		tp.Privileges[0].Luid=luid;
		tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
		::AdjustTokenPrivileges(hToken,FALSE,&tp,
			sizeof(TOKEN_PRIVILEGES),NULL,NULL);
		//关闭电源
		return ::ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);
	}
	//非Win NT/2000系统
	else
	{
		//直接关闭电源
		return ::ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);
	}
	return TRUE;
}
bool SysControl::RunYourExe()
{
//	char szPath[MAX_PATH];
//	GetModuleFileName(NULL,szPath,MAX_PATH);
	CString strPath=exePath;
//	strPath=strPath.Left(strPath.ReverseFind('\\'))+"yourapp.exe";

	STARTUPINFO StartInfo;
	PROCESS_INFORMATION procStruct;
	memset(&StartInfo,0x00,sizeof(STARTUPINFO));
	StartInfo.cb=sizeof(STARTUPINFO);
	
	if(!::CreateProcess((LPCTSTR)strPath,NULL,NULL,NULL,FALSE,
		NORMAL_PRIORITY_CLASS,NULL,NULL,&StartInfo,&procStruct))
		return false;
	return true;
}
BOOL SysControl::KillOrSearchProc(bool llFlag)
{
	BOOL bStatu=FALSE;
	HANDLE hSnapshot;
	PROCESSENTRY32  pe;

	hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	pe.dwSize=sizeof(PROCESSENTRY32);
	if(Process32First(hSnapshot,&pe))
	{
		do
		{
			if(strcmp(pe.szExeFile,(LPCTSTR)killExeName)==0)
			{
				bStatu=TRUE;
				HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);
				if(llFlag) TerminateProcess(hProcess,0);
			}
		}while(Process32Next(hSnapshot,&pe));
	}
	CloseHandle(hSnapshot);
	return bStatu;
}

⌨️ 快捷键说明

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