C++基础--获取部分系统信息

///
///获取系统信息Demo
///
#include "stdafx.h"
#include<windows.h>
#include<conio.h>
#include<tchar.h>
#include<locale.h>
#include"Reader.h"
#include"Writer.h"
#include<stdlib.h>
#include<iostream>
using namespace  std;
wchar_t* envVarStrings[]=
{
			TEXT("OS					=%OS%"),
			TEXT("PATH				=%PATH%"),
			TEXT("HOMEPATH	=%HOMEPATH%"),
			TEXT("TEMP				=%TEMP%")
};
#define ENV_VAR_STRING_COUNT (sizeof(envVarStrings)/sizeof(wchar_t*))
#define INFO_BUFFER_SIZE	32767
void printError(wchar_t* msg);
int _tmain(int argc, _TCHAR* argv[])
{
	DWORD i;
	wchar_t infoBuf[INFO_BUFFER_SIZE];
	DWORD bufCharCount=INFO_BUFFER_SIZE;
	//Get and display the name of the computer
	bufCharCount=INFO_BUFFER_SIZE;
	if(!GetComputerName(infoBuf,&bufCharCount))
		printError(L"GetComputerName");
	wcout.imbue(std::locale("chs"));
	wcout<<endl<<"Computer name:"<<infoBuf<<endl;

	//Get and display the user name
	bufCharCount=INFO_BUFFER_SIZE;
	if(!GetUserName(infoBuf,&bufCharCount))
	printError(L"GetUserName:");
	wcout<<"User Name:"<<infoBuf<<endl;

	//Get and display the system directoy.
	if(!GetSystemDirectory(infoBuf,INFO_BUFFER_SIZE))
		printError(L"System Directory");
	wcout<<"System Directory:"<<infoBuf<<endl;

	//Get and display the Windows directory.
	if(!GetWindowsDirectory(infoBuf,INFO_BUFFER_SIZE))
		printError(L"Get System Directory");
	wcout<<"Windows Directory:"<<infoBuf<<endl;

	//Expand and display a few environment variables
	wcout<<"Small selection of Environment Variables:"<<endl;
	for(i=0;i<ENV_VAR_STRING_COUNT;i++)
	{
		bufCharCount=ExpandEnvironmentStrings(envVarStrings[i],infoBuf,INFO_BUFFER_SIZE);
		if(bufCharCount>INFO_BUFFER_SIZE)
			wcout<<"Buffer too small to expand :"<<envVarStrings[i]<<endl;
		else if(!bufCharCount)
			printError(L"Expand Environment Strings ");
			wcout<<infoBuf<<endl;
	}
	wcout<<"\n\n";
	cin.get();
	return 0;
}
void printError(wchar_t* msg)
{
	DWORD eNum;
	TCHAR sysMsg[256];
	TCHAR* p;
	eNum=GetLastError();
	FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|
		FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,eNum,
		MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
		sysMsg,256,NULL);
	p=sysMsg;
	while((*p>31||(*p==9)))
	{
		++p;
	}
	do{*p--==0;}while((p >= sysMsg ) &&
		( ( *p == '.') || ( *p<33 ) ));
	wcout<<"\n\t"<<msg<<"failed with error "<<eNum<<" ("<<msg<<")"<<endl;
}

 

posted @ 2012-06-15 15:48  Kingdom_0  阅读(360)  评论(0编辑  收藏  举报