用C++6.0 MFC如何获取应用程序信息

用C++6.0MFC如何获取应用程序信息... 用C++6.0 MFC如何获取应用程序信息 展开
 我来答
小石头1s
2008-05-11 · TA获得超过1368个赞
知道大有可为答主
回答量:1711
采纳率:0%
帮助的人:1160万
展开全部
给你一个代码片段

使用效果看这个软件 http://regfix.533.net/RegFix.rar

// OS Identify
// Used in Visual C++/MFC

bool CRegFixDlg::PlatformCheck ()
{
//判断操作系统版本
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
CString tmp;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
}
//////////////////////////////////////////////////////////////////////////
//// Windows 98 识别
if(osvi.dwMajorVersion ==4 && osvi.dwMinorVersion ==10)
{
bIsNT = FALSE;
if (osvi.szCSDVersion[1] == 'A')
{
tmp="Windows 98";
m_strWinVersion.Format ("%s Second Edition",tmp);
// Win98SE
}
else
{
m_strWinVersion.Format ("%s",tmp);
// Win98
}
}
//////////////////////////////////////////////////////////////////////////
//// Windows ME 识别
if(osvi.dwMajorVersion ==4 && osvi.dwMinorVersion ==90)
{
bIsNT = FALSE;
tmp="Windows ME";
m_strWinVersion.Format ("%s",tmp );
// Windows ME
}
//////////////////////////////////////////////////////////////////////////
//// Windows 2000 识别
if (osvi.dwMajorVersion ==5 && osvi.dwMinorVersion ==0)
{
bIsNT = TRUE;
if( bOsVersionInfoEx )
{
if ( osvi.wProductType == VER_NT_WORKSTATION )
{
tmp = "Windows 2000 Professional";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
else if (osvi.wProductType == VER_NT_SERVER )
{
if ( osvi.wSuiteMask & VER_SUITE_DATACENTER )
{
tmp = "Windows 2000 Datacenter Edition";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
{
tmp = "Windows 2000 Advanced Server";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
else
{
tmp = "Windows 2000 Server";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
}
}
if ( osvi.wServicePackMajor == 0)
{
// Win2000 Gold Edition
}
else if ( osvi.wServicePackMajor == 1)
{
// Win2000 SP1
}
else if ( osvi.wServicePackMajor == 2)
{
// Win2000 SP2
}
else if ( osvi.wServicePackMajor == 3)
{
// Win2000 SP3
}
else if ( osvi.wServicePackMajor == 4)
{
// Win2000 SP4
}
else if ( osvi.wServicePackMajor == 5)
{
// Win2000 SP5
}
}
//////////////////////////////////////////////////////////////////////////
//// Windows XP 识别
if (osvi.dwMajorVersion ==5 && osvi.dwMinorVersion ==1)
{
bIsNT = TRUE;
if( bOsVersionInfoEx )
{
if ( osvi.wProductType == VER_NT_WORKSTATION )
{
if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
{
tmp="Windows XP Home Edition";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
else
{
tmp="Windows XP Professional";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
}
}
if ( osvi.wServicePackMajor == 0)
{
// WinXP Gold
}
else if ( osvi.wServicePackMajor == 1)
{
// WinXP SP1
}
else if ( osvi.wServicePackMajor == 2)
{
// WinXP SP2
}
}
//////////////////////////////////////////////////////////////////////////
//// Windows Server 2003 识别
if (osvi.dwMajorVersion ==5 && osvi.dwMinorVersion ==2)
{
bIsNT = TRUE;
if( bOsVersionInfoEx )
{
// if (osvi.wProductType == VER_NT_SERVER ) //采用后不能识别具体版本
if ( osvi.wSuiteMask & VER_SUITE_DATACENTER )
{
tmp = "Windows Server 2003 Datacenter Edition";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
else if (osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
{
tmp = "Windows Server 2003 Enterprise Edition";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
else if (osvi.wSuiteMask == VER_SUITE_BLADE )
{
tmp = "Windows Server 2003 Web Edition";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
else
{
tmp = "Windows Server 2003 Standard Edition";
m_strWinVersion.Format ("%s %s",tmp,osvi.szCSDVersion );
}
}
if ( osvi.wServicePackMajor == 0)
{
// Win2003 Gold
}
else if ( osvi.wServicePackMajor == 1)
{
// Win2003 SP1
}
else if ( osvi.wServicePackMajor == 2)
{
// Win2003 SP2
}
}
return TRUE;
}
风和同
2008-05-11 · TA获得超过1372个赞
知道小有建树答主
回答量:593
采纳率:0%
帮助的人:429万
展开全部
//-------------------------------------------------------------------
PROCESSENTRY32 pe;
DWORD id = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize = sizeof(PROCESSENTRY32);
if( !Process32First(hSnapshot,&pe) )
return 0;
do
{
pe.dwSize = sizeof(PROCESSENTRY32);
if( Process32Next(hSnapshot,&pe)==FALSE )
break;
pe.szExeFile;//就是进程名字 ,加入数组或者列表框处理
} while(1);
//-------------------------------------------------------------------

//-------------------------------------------------------------------
HANDLE m_Sys = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(m_Sys == NULL)
{
len = 0;
m_Command = GET_PROCESS_LIST_ERR;
return;
}
PROCESSENTRY32 m_Lppe = {0};
m_Lppe.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First(m_Sys,&m_Lppe))
{
len = 0;
m_Command = GET_PROCESS_LIST_ERR;
CloseHandle(m_Sys);
return;
}
CFile m_File;
if(!m_File.Open(m_TmpFileName,CFile::modeCreate|CFile::modeReadWrite))
{
len = 0;
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;
strcpy(m_ProcessList.szExeFile,m_Lppe.szExeFile);
m_File.Write(&m_ProcessList,sizeof(PROCESSLIST));
while(Process32Next(m_Sys,&m_Lppe))
{
m_ProcessList.cntThreads = m_Lppe.cntThreads;
m_ProcessList.pcPriClassBase = m_Lppe.pcPriClassBase;
m_ProcessList.th32ProcessID = m_Lppe.th32ProcessID;
strcpy(m_ProcessList.szExeFile,m_Lppe.szExeFile);
m_File.Write(&m_ProcessList,sizeof(PROCESSLIST));
}
CloseHandle(m_Sys);
DWORD m_FileLen = m_File.GetLength();
if(m_FileLen == 0)
{
len = 0;
m_Command = 0;
m_File.Close();
return;
}
m_File.Close();
*((DWORD*) m_TransData) = m_FileLen;
len = sizeof(DWORD);
m_Command = 0;
//-------------------------------------------------------------------
使用ToolHelp32 API,他们可以获得操作系统的一些底层信息,比如进程信息。但因为ToolHelp32 API影响进程的健壮性和系统的安全性,所以在NT/2K上不被支持。具体方法 zhenbe(一头栽在C里面) 已经讲了。

在NT/2K上要使用PS API,NT/2K以上都支持,在其中EnumProcesses可以获得进程信息,EnumDeviceDrivers可以获得加载的驱动程序信息,等等。
学vs2005吧,省去了mfc,用窗体就可以代替了,现在都向窗体方向发展。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式