You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
4.4 KiB
188 lines
4.4 KiB
/*
|
|
***************************************************************************
|
|
*
|
|
* 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;
|
|
}
|