/ src / modules / ZoomIt / ZoomIt / VersionHelper.cpp
VersionHelper.cpp
  1  
  2  
  3  //--------------------------------------------------------------------
  4  //
  5  // GetLanguageVersionString
  6  //
  7  // Gets version information for a particular code page.
  8  //
  9  //--------------------------------------------------------------------
 10  #include <stdio.h>
 11  #include "pch.h"
 12  #include "VersionHelper.h"
 13  
 14  PTCHAR GetLanguageVersionString(P_VERSION_INFO VersionInfo,
 15      LANGID LanguageId, WORD Charset,
 16      LPCTSTR VersionString)
 17  {
 18      TCHAR szQueryStr[0x100];
 19      PTCHAR pszVerRetVal;
 20      UINT cbReturn;
 21      BOOL fFound = FALSE;
 22  
 23      // Format the string  
 24      _stprintf_s(szQueryStr, ARRAYSIZE(szQueryStr), _T("\\StringFileInfo\\%04X%04X\\%s"),
 25          LanguageId, Charset,
 26          VersionString);
 27  
 28      fFound = VerQueryValue(VersionInfo, szQueryStr,
 29          reinterpret_cast<LPVOID *>(&pszVerRetVal), &cbReturn);
 30  
 31      if (!fFound) {
 32          return NULL;
 33      }
 34      else {
 35          return pszVerRetVal;
 36      }
 37  }
 38  
 39  //
 40  // explicitly use wide char version
 41  // this is used when show banner in remote session before display eula from console which requires unicode for French
 42  // it's needed for multibyte app
 43  //
 44  PWCHAR GetLanguageVersionStringW(P_VERSION_INFO VersionInfo,
 45      LANGID LanguageId, WORD Charset,
 46      LPCWSTR VersionString)
 47  {
 48      WCHAR szQueryStr[0x100];
 49      PWCHAR pszVerRetVal;
 50      UINT cbReturn;
 51      BOOL fFound = FALSE;
 52  
 53      // Format the string  
 54      swprintf_s(szQueryStr, ARRAYSIZE(szQueryStr), L"\\StringFileInfo\\%04X%04X\\%s",
 55          LanguageId, Charset,
 56          VersionString);
 57  
 58      fFound = VerQueryValueW(VersionInfo, szQueryStr,
 59          reinterpret_cast<LPVOID *>(&pszVerRetVal), &cbReturn);
 60  
 61      if (!fFound) {
 62          return NULL;
 63      }
 64      else {
 65          return pszVerRetVal;
 66      }
 67  }
 68  
 69  //--------------------------------------------------------------------
 70  //
 71  // GetVersionString
 72  //
 73  // Gets a version string.
 74  //
 75  //--------------------------------------------------------------------
 76  PTCHAR GetVersionString(P_VERSION_INFO VersionInfo,
 77      LPCTSTR VersionString)
 78  {
 79      PTCHAR pszVerRetVal;
 80      P_VERSION_TRANSLATION pTranslation;
 81      VERSION_TRANSLATION translation;
 82      unsigned int length;
 83  
 84      //
 85      // Get the language id
 86      //
 87      translation.langID = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
 88      pTranslation = &translation;
 89      VerQueryValue(VersionInfo,
 90          _T("\\VarFileInfo\\Translation"),
 91          reinterpret_cast<PVOID *>(&pTranslation),
 92          &length);
 93  
 94      pszVerRetVal = GetLanguageVersionString(VersionInfo,
 95          pTranslation->langID,
 96          pTranslation->charset,
 97          VersionString);
 98      return pszVerRetVal;
 99  }
100  
101  //
102  // explicitly use wide char version
103  // this is used when show banner in remote session before display eula from console which requires unicode for French
104  // it's needed for multibyte app
105  //
106  PWCHAR GetVersionStringW(P_VERSION_INFO VersionInfo,
107      LPCWSTR VersionString)
108  {
109      PWCHAR pszVerRetVal;
110      P_VERSION_TRANSLATION pTranslation;
111      VERSION_TRANSLATION translation;
112      unsigned int length;
113  
114      //
115      // Get the language id
116      //
117      translation.langID = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
118      pTranslation = &translation;
119      VerQueryValueW(VersionInfo,
120          L"\\VarFileInfo\\Translation",
121          reinterpret_cast<PVOID *>(&pTranslation),
122          &length);
123  
124      pszVerRetVal = GetLanguageVersionStringW(VersionInfo,
125          pTranslation->langID,
126          pTranslation->charset,
127          VersionString);
128      return pszVerRetVal;
129  }