|
|
/*
*************************************************************************** * * Copyright (c) 1999 Microsoft Corporation * * Module Name: BugRepSysInfo.c * * Abstract : Gets language and OS information for bug reporting pages * * * Revision History: * * 1999-09-30 : aarvind : Created the file, my first Windows program * *************************************************************************** */
// BugRepSysInfo.cpp : Implementation of CBugRepSysInfo
#include "stdafx.h"
#include "Brp_sysinfo.h"
#include "BugRepSysInfo.h"
/////////////////////////////////////////////////////////////////////////////
// CBugRepSysInfo
static WORD GetLanguageFromFile(const TCHAR* pszFileName, const TCHAR* pszPath);
/*
*************************************************************************** * * GetLanguageString * * Returns the language found from a file and using the user default * settings * *************************************************************************** */ STDMETHODIMP CBugRepSysInfo::GetLanguageID(INT *pintLanguage) { WORD wLanguage; TCHAR szSystemPath[MAX_PATH];
// Get the original language from a system file.
if ( !GetSystemDirectory(szSystemPath, MAX_PATH)) { //
// Handle failure of this function to get system directory
//
return E_FAIL ; };
//
// Gets the language id, returns zero if a failure occurs
//
if (wLanguage = GetLanguageFromFile(TEXT("user.exe"), szSystemPath)) { *pintLanguage = (INT) wLanguage ; } else { //
// Handle failure of this function to get language or file information
//
return E_FAIL ; }
return S_OK; }
/*
*************************************************************************** * * GetOSVersionString * * Gets the version information of the operating system * *************************************************************************** */ STDMETHODIMP CBugRepSysInfo::GetOSVersionString(BSTR *pbstrOSVersion) {
OSVERSIONINFO OSVersionInfo; DWORD dwPlatformID; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; TCHAR szCSDVersion[200]; TCHAR szOSVersion[200];
USES_CONVERSION;
// Get Windows version
OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVersionInfo);
if ( GetVersionEx(&OSVersionInfo) ) {
dwMajorVersion = OSVersionInfo.dwMajorVersion; dwMinorVersion = OSVersionInfo.dwMinorVersion; dwBuildNumber = OSVersionInfo.dwBuildNumber; dwPlatformID = OSVersionInfo.dwPlatformId;
lstrcpy(szCSDVersion, OSVersionInfo.szCSDVersion);
//
// Create system information string
//
wsprintf(szOSVersion,"%d.%d.%d %s",dwMajorVersion,dwMinorVersion,LOWORD(dwBuildNumber),szCSDVersion);
*pbstrOSVersion = SysAllocString(T2COLE(szOSVersion)); } else {
//
// Function to get OS Version failed so do something
//
// Use GetLastError to return error code to script
//
return E_FAIL ;
}
return S_OK; }
/*
*************************************************************************** * * GetLanguageFromFile * *************************************************************************** */ static WORD GetLanguageFromFile(const TCHAR* pszFileName, const TCHAR* pszPath) { BYTE FileVersionBuffer[4096]; DWORD *pdwCharSet; UINT cb; DWORD dwHandle; TCHAR szFileAndPath[MAX_PATH]; WORD wLanguage; lstrcpy(szFileAndPath, pszPath); lstrcat(szFileAndPath, TEXT("\\")); lstrcat(szFileAndPath, pszFileName); memset(&FileVersionBuffer, 0, sizeof FileVersionBuffer);
//
// Set default language value
//
wLanguage = 0; if (cb = GetFileVersionInfoSize(szFileAndPath, &dwHandle/*ignored*/)) { cb = (cb <= sizeof FileVersionBuffer ? cb : sizeof FileVersionBuffer);
if (GetFileVersionInfo(szFileAndPath, 0, cb, &FileVersionBuffer)) { pdwCharSet = 0;
if (VerQueryValue(&FileVersionBuffer, TEXT("\\VarFileInfo\\Translation"), (void**)&pdwCharSet, &cb) && pdwCharSet && cb) { wLanguage = LOWORD(*pdwCharSet); } } }
return wLanguage; }
STDMETHODIMP CBugRepSysInfo::GetUserDefaultLCID(DWORD *pdwLCID) { *pdwLCID = ::GetUserDefaultLCID();
return S_OK; }
STDMETHODIMP CBugRepSysInfo::GetActiveCP(UINT *pnACP) { *pnACP = ::GetACP();
return S_OK; }
|