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

📄 zsysinfo.cpp

📁 MD5算法的程序,包括头文件,可以运行,可以对文件进行加密
💻 CPP
字号:

/*-======================- Copyright (c) 2007 -======================-

程序作者:

    Hacker Ans : 駭客任務組Ans软件工作室
联系方式:

    QQ:360038060
	[oopfans]群:13161288


修改时间:

    2007-03-09

功能描述:
    系统相关信息

版权声明:
    许可任何单位,个人随意使用,拷贝,修改,散布及出售这份代码,但是必须保
    留此版权信息,以慰藉作者辛勤的劳动,及表明此代码的来源,如若此份代码
    有任何BUG,请通知作者,以便弥补作者由于水平所限而导致的一些错误和不
    足,谢谢!

-======================- Copyright (c) 2006 -======================-*/

#include "stdafx.h"
#include "ZSysInfo.h"

ZSysInfo::ZSysInfo()
{
	
}

ZSysInfo::~ZSysInfo()
{

}

int ZSysInfo::GetYear()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	return this->m_SYSTEMTIME.wYear;
}

int ZSysInfo::GetMonth()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	return this->m_SYSTEMTIME.wMonth;
}

int ZSysInfo::GetDay()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	return this->m_SYSTEMTIME.wDay;
}

int ZSysInfo::GetHour()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	if(this->m_SYSTEMTIME.wHour+8>=24)
		return this->m_SYSTEMTIME.wHour+8-24;
	else
		return this->m_SYSTEMTIME.wHour+8;
}

int ZSysInfo::GetMinute()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	return this->m_SYSTEMTIME.wMinute;
}

int ZSysInfo::GetSecond()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	return this->m_SYSTEMTIME.wSecond;
}

int ZSysInfo::GetMillisecond()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	return this->m_SYSTEMTIME.wMilliseconds;
}

string ZSysInfo::GetYear_str()
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	string strYear;
	char Temp[5];
	memset(Temp,0,5);
	itoa(this->m_SYSTEMTIME.wYear,Temp,10);
	strYear=Temp;
	return strYear;
}

string ZSysInfo::GetMonth_str(bool FillZero)
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	string strMonth;
	char Temp[3];
	memset(Temp,0,3);
	itoa(this->m_SYSTEMTIME.wMonth,Temp,10);
	if(FillZero)
	{
		if(this->m_SYSTEMTIME.wMonth<10)
		{
			strMonth="0";
			strMonth+=Temp;
		}
		else
		{
			strMonth=Temp;
		}
	}
	else
	{
		strMonth=Temp;
	}
	return strMonth;
}

string ZSysInfo::GetDay_str(bool FillZero)
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	string strDay;
	char Temp[3];
	memset(Temp,0,3);
	itoa(this->m_SYSTEMTIME.wDay,Temp,10);
	if(FillZero)
	{
		if(this->m_SYSTEMTIME.wDay<10)
		{
			strDay="0";
			strDay+=Temp;
		}
		else
		{
			strDay=Temp;
		}
	}
	else
	{
		strDay=Temp;
	}
	return strDay;
}

string ZSysInfo::GetHour_str(bool FillZero)
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	string strHour;
	char Temp[3];
	memset(Temp,0,3);
	if(this->m_SYSTEMTIME.wHour+8>=24)
		itoa(this->m_SYSTEMTIME.wHour+8-24,Temp,10);
	else
		itoa(this->m_SYSTEMTIME.wHour+8,Temp,10);

	if(FillZero)
	{
		if(this->m_SYSTEMTIME.wHour+8>=24)
		{
			if(this->m_SYSTEMTIME.wHour+8-24<10)
			{
				strHour="0";
				strHour+=Temp;
			}
			else
			{
				strHour=Temp;
			}
		}
		else
		{
			if(this->m_SYSTEMTIME.wHour+8<10)
			{
				strHour="0";
				strHour+=Temp;
			}
			else
			{
				strHour=Temp;
			}
		}
	}
	else
	{
		strHour=Temp;
	}
	return strHour;
}

string ZSysInfo::GetMinute_str(bool FillZero)
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	string strMinute;
	char Temp[3];
	memset(Temp,0,3);
	itoa(this->m_SYSTEMTIME.wMinute,Temp,10);
	if(FillZero)
	{
		if(this->m_SYSTEMTIME.wMinute<10)
		{
			strMinute="0";
			strMinute+=Temp;
		}
		else
		{
			strMinute=Temp;
		}
	}
	else
	{
		strMinute=Temp;
	}
	return strMinute;
}

string ZSysInfo::GetSecond_str(bool FillZero)
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	string strSecond;
	char Temp[3];
	memset(Temp,0,3);
	itoa(this->m_SYSTEMTIME.wSecond,Temp,10);
	if(FillZero)
	{
		if(this->m_SYSTEMTIME.wSecond<10)
		{
			strSecond="0";
			strSecond+=Temp;
		}
		else
		{
			strSecond=Temp;
		}
	}
	else
	{
		strSecond=Temp;
	}
	return strSecond;
}

string ZSysInfo::GetMillisecond_str(bool FillZero)
{
	::GetSystemTime(&this->m_SYSTEMTIME);
	string strMillisecond;
	char Temp[5];
	memset(Temp,0,5);
	itoa(this->m_SYSTEMTIME.wMilliseconds,Temp,10);
	if(FillZero)
	{
		if(strlen(Temp)==1)
		{
			strMillisecond="000";
			strMillisecond=Temp;
		}
		else if(strlen(Temp)==2)
		{
			strMillisecond="00";
			strMillisecond+=Temp;
		}
		else if(strlen(Temp)==3)
		{
			strMillisecond="0";
			strMillisecond+=Temp;
		}
		else
		{
			strMillisecond=Temp;
		}
	}
	else
	{
		strMillisecond=Temp;
	}
	return strMillisecond;
}

deque<PROCESSENTRY32> ZSysInfo::GetProcessInfo()
{
	deque<PROCESSENTRY32> dqProcess;
	HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(hProcessSnap == INVALID_HANDLE_VALUE) return dqProcess;
	PROCESSENTRY32 processentry32;
	processentry32.dwSize =sizeof(PROCESSENTRY32);

	if(Process32First(hProcessSnap,&processentry32))
	{
		do
		{
			dqProcess.push_back(processentry32);
		}while(::Process32Next(hProcessSnap,&processentry32));
	}
	CloseHandle(hProcessSnap);
	return dqProcess;
}

int ZSysInfo::GetOSVersion()
{
	OSVERSIONINFOEX osvi;
	osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
	if(!GetVersionEx((OSVERSIONINFO *)&osvi))
	{
		return 0;
	}
	switch(osvi.dwPlatformId)
	{
	//Windows 95, Windows 98, or Windows Me.
	case VER_PLATFORM_WIN32_WINDOWS:
		if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==10) return 1; //win 98
		if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==90) return 2; //win Me
		if(osvi.dwMajorVersion==3 && osvi.dwMinorVersion ==51) return 3; //win NT 3.51
		if(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==0)  return 4; //win NT 4.0
	//Windows NT, Windows 2000, Windows XP, or Windows Server 2003 family.	
	case VER_PLATFORM_WIN32_NT:
		if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==0) return 5; //win 2000
		if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==1) return 6; //win xp
		if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==2) return 7; //win 2003
	//unknow OptionSystem
	default:
		return 0;
	}
}

deque<string> ZSysInfo::GetLocalhostIP()
{
	//本机名称
	char Name[256]={0};
	deque<string> dqIPList;

	WSADATA WSAData;
	HOSTENT *host_info;
	WORD  wVersionRequested;
	wVersionRequested = MAKEWORD( 2, 2 ); 
	if(0==WSAStartup(wVersionRequested,&WSAData))
	{
		gethostname(Name,sizeof(Name));
		this->m_LocalhostName=Name;
		host_info=gethostbyname(Name);
		for( int i = 0; host_info!= NULL && host_info->h_addr_list[i]!= NULL; i++)
		{
			dqIPList.push_back(inet_ntoa (*(struct in_addr *)host_info->h_addr_list[i]));
		}
	}
	WSACleanup();
	return dqIPList;
}

string ZSysInfo::GetLocalhostName()
{
	if(m_LocalhostName.empty())
		GetLocalhostIP();
	return m_LocalhostName;
}

deque<THREADENTRY32> ZSysInfo::GetThreadInfo(unsigned int Pid)
{
	deque<THREADENTRY32> dqThread;
	HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); 
	if(hThreadSnap == INVALID_HANDLE_VALUE) return dqThread;
	THREADENTRY32 threadentry32;
	threadentry32.dwSize=sizeof(THREADENTRY32);
	if (Thread32First(hThreadSnap,&threadentry32))
	{
		do
		{
			if (threadentry32.th32OwnerProcessID == Pid)
			{
				dqThread.push_back(threadentry32);
			}
		}while(Thread32Next(hThreadSnap,&threadentry32));
	}
	CloseHandle(hThreadSnap);
	return dqThread;
}

deque<int> ZSysInfo::GetProcessID(char* szProcessName)
{
	deque<int> dqPid;
	deque<PROCESSENTRY32> dqProcess=GetProcessInfo();
	string strProcessName;
	for(int i=0;i<dqProcess.size();i++)
	{
		strProcessName=CharUpper(((PROCESSENTRY32)dqProcess[i]).szExeFile);
		if(GetOSVersion()==1 || GetOSVersion()==2)
		{
			if(strProcessName.substr(strProcessName.find_last_of("\\")+1)==CharUpper(szProcessName))
			dqPid.push_back(((PROCESSENTRY32)dqProcess[i]).th32ProcessID);
		}
		else
		{
			if(strProcessName==CharUpper(szProcessName))
			dqPid.push_back(((PROCESSENTRY32)dqProcess[i]).th32ProcessID);
		}
	}
	return dqPid;
}

string ZSysInfo::GetProcessName(int ProcessID)
{
	deque<PROCESSENTRY32> dqProcess=GetProcessInfo();
	for(int i=0;i<dqProcess.size();i++)
	{
		if(((PROCESSENTRY32)dqProcess[i]).th32ProcessID==ProcessID)
		{
			return ((PROCESSENTRY32)dqProcess[i]).szExeFile;
		}
	}
	return "";
}

HANDLE ZSysInfo::GetThreadHandle(unsigned int ThreadID)
{
	typedef HANDLE (__stdcall *OPENTHREAD) (DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwThreadId);
	HMODULE hModule=LoadLibrary("Kernel32.dll");
	if(hModule==NULL) return (HANDLE)0xFFFFFFFF;
	OPENTHREAD lpfnOpenThread=(OPENTHREAD)::GetProcAddress(hModule,"OpenThread");
	if(lpfnOpenThread==NULL) return (HANDLE)0xFFFFFFFF;
	HANDLE hThread=lpfnOpenThread(THREAD_ALL_ACCESS,false,ThreadID);
	FreeLibrary(hModule);
	return hThread;	
}

/*
MSDN:
Return Values
To continue enumeration, the callback function must return TRUE;
to stop enumeration, it must return FALSE. 
*/
bool ZSysInfo::EnumChildProc(HWND hwnd,LPARAM lParam)
{
	if(((CTRLINFO*)(void*)lParam)->CtrlID==GetWindowLong(hwnd,GWL_ID) && 
	((CTRLINFO*)(void*)lParam)->CtrlStyle==GetWindowLong(hwnd,GWL_STYLE))
	{
		m_HWND=hwnd;
		return false;
	}
	return true;
}

HWND ZSysInfo::FindChildWindow(HWND hParent,long CtrlID,long CtrlStyle)
{
	m_HWND=(HWND)-1; // 0xFFFFFFFF
	CTRLINFO ctrlinfo;
	ctrlinfo.CtrlID=CtrlID;
	ctrlinfo.CtrlStyle=CtrlStyle;
	if(::EnumChildWindows(hParent,
		(WNDENUMPROC)m_thunk.Callback(this,&ZSysInfo::EnumChildProc,ZThunk::THISCALL),
		(LPARAM)(void*)(&ctrlinfo)))
	{
		return m_HWND;
	}
	return m_HWND;
}

⌨️ 快捷键说明

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