///
///获取系统信息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;
}