WetCode

Untitled

Dec 14th, 2013
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1.  
  2. #include <Windows.h>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <iomanip>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. struct LANGANDCODEPAGE {
  11.     WORD wLanguage;
  12.     WORD wCodePage;
  13. } *lpTranslate;
  14.  
  15. #pragma comment(lib, "Version.lib")
  16.  
  17. int _tmain(int argc, _TCHAR* argv[])
  18. {
  19.     string sFileName;
  20.     DWORD dwVISize = 0;
  21.     DWORD dummyHandle;
  22.     unsigned unFixedFileInfoSize = 0;
  23.     unsigned unDescriptSize = 0;
  24.     unsigned char *cInfoBuffer;
  25.    
  26.     VS_FIXEDFILEINFO *lpFixedFInfo = new VS_FIXEDFILEINFO[ sizeof( VS_FIXEDFILEINFO ) ];
  27.     ZeroMemory( lpFixedFInfo, sizeof( VS_FIXEDFILEINFO ) );
  28.  
  29.     LANGANDCODEPAGE langAndCodePage;
  30.     ZeroMemory( &langAndCodePage, sizeof( LANGANDCODEPAGE ) );
  31.  
  32.     cout << "Enter Filename: ";
  33.     getline( cin, sFileName );
  34.     cout << "File Name Set: " << sFileName << endl;
  35.  
  36.     dwVISize = GetFileVersionInfoSize( sFileName.c_str(), &dummyHandle );
  37.     if ( dwVISize == 0 )
  38.     {
  39.         cout << "GetFileVersionInfoSize FAILED! - Error Code: " << GetLastError() << endl;
  40.         system("PAUSE");
  41.         return 0;
  42.     } else { cout << "Version Size: " << dwVISize << endl; }
  43.  
  44.    
  45.     cInfoBuffer = new unsigned char[ dwVISize ];
  46.     ZeroMemory( cInfoBuffer, dwVISize );
  47.  
  48.     if ( !GetFileVersionInfo( sFileName.c_str(), NULL, dwVISize, cInfoBuffer) )
  49.     {
  50.         cout << "GetFileVersionInfo FAILED! - Error Code: " << GetLastError() << endl;
  51.         system("PAUSE");
  52.         return 0;
  53.     } else { cout << "Version Info Retrived\t[OK]." << endl; }
  54.  
  55.     if ( !VerQueryValue( cInfoBuffer, "\\VarFileInfo\\Translation", (LPVOID*)&langAndCodePage, &unFixedFileInfoSize ) )
  56.     {
  57.         cout << "VerQueryValue \\VarFileInfo\\Translation - failed with error: " << GetLastError() << endl;
  58.         system("PAUSE");
  59.         return false;
  60.     } else { cout << "\\VarFileInfo\\Translation \t[OK]." << endl; }
  61.    
  62.     cout << "Lang ID: " << langAndCodePage.wLanguage << endl;
  63.     cout << "Code page: " << langAndCodePage.wCodePage << endl;
  64.  
  65.    
  66.     std::wstringstream ss;
  67.  
  68.      (ss << "\\StringFileInfo\\"<< std::hex << std::setw(4)<<std::setfill(L'0') << langAndCodePage.wLanguage
  69.          << std::setw(4) << langAndCodePage.wLanguage <<"\\FileDescription");
  70.  
  71.      wcout << ss.str().c_str() << endl;
  72.  
  73.      char *cDescriptName = new char[MAX_PATH];
  74.      
  75.      if ( !VerQueryValueW( cInfoBuffer, ss.str().c_str(), (LPVOID*)&cDescriptName, &unDescriptSize ) )
  76.     {
  77.         cout << "VerQueryValue " << " File Description " << " - failed with error: " << GetLastError() << endl;
  78.         system("PAUSE"); // ERROR 1813 - Resource not found...
  79.         return 0;
  80.      } else { cout << "FILE DESCRIPTION: " << cDescriptName << endl; }
  81.  
  82.     system("PAUSE");
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment