📄 syscontrol.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 + -