Files
EgtGeneral/GetModuleVer.cpp
T
Dario Sassi 043554c05d EgtGeneral 1.6e2 :
- aggiornamenti per cambio nome include di base
- modifiche a LuaManager per direttorio librerie lua e ultima Require
- FromString e ToString per STRVECTOR
- corrette FromString per INTVECTOR e DBLVECTOR
2015-05-11 20:57:52 +00:00

96 lines
2.9 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2013-2013
//----------------------------------------------------------------------------
// File : GetModuleVer.cpp Data : 10.12.13 Versione : 1.4a4
// Contenuto : Funzione che restituisce la versione del modulo richiesto.
//
//
//
// Modifiche : 10.12.13 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "\EgtDev\Include\EgnGetModuleVer.h"
#include "\EgtDev\Include\EgtStringConverter.h"
#include "\EgtDev\Include\EgnStringUtils.h"
#include <Shlwapi.h>
using namespace std ;
//-----------------------------------------------------------------------------
bool
GetModuleVersion( HINSTANCE hModule, string& sVer)
{
bool bOk ;
wchar_t szFileName[_MAX_PATH] ;
DWORD dwNULL ;
DWORD dwSize ;
UINT dwUsefulSize ;
LPVOID lpData ;
LPVOID lpUsefulData ;
VS_FIXEDFILEINFO* pvsInfo ;
// imposto versione a non trovata
sVer = "0.0_0" ;
// trovo nome del file dato l'hInstance
::GetModuleFileNameW( hModule, szFileName, _MAX_PATH) ;
// mi faccio dare il buffer delle informazioni dal file
dwSize = ::GetFileVersionInfoSizeW( szFileName, &dwNULL) ;
if ( dwSize == 0)
return false ;
lpData = malloc( size_t( dwSize));
if ( lpData == nullptr)
return false ;
GetFileVersionInfoW( szFileName, dwNULL, dwSize, lpData) ;
// Chiedo le info standard
if ( ::VerQueryValueW( lpData, L"\\", &lpUsefulData, &dwUsefulSize)) {
pvsInfo = (VS_FIXEDFILEINFO*) lpUsefulData ;
int nMajVer = pvsInfo->dwFileVersionMS >> 16 ;
int nMinVer = pvsInfo->dwFileVersionMS % 0x10000 ;
char cChar = (char) ( (pvsInfo->dwFileVersionLS >> 16) + 96) ;
int nSub = pvsInfo->dwFileVersionLS % 0x10000 ;
sVer = ToString( nMajVer) + "." + ToString( nMinVer) + cChar + ToString( nSub) ;
bOk = true ;
}
else
bOk = false ;
// disalloco il buffer
free( lpData) ;
return bOk ;
}
//-----------------------------------------------------------------------------
bool
GetModuleDirectory( HINSTANCE hModule, string& sDir)
{
wchar_t szFileNameW[_MAX_PATH] ;
// trovo path del file dato l'hInstance
if ( ::GetModuleFileNameW( hModule, szFileNameW, _MAX_PATH) == 0)
return false ;
// elimino nome.estensione del file
PathRemoveFileSpecW( szFileNameW) ;
// assegno valore di ritorno
sDir = LPSTR( WtoA( szFileNameW)) ;
return true ;
}
//-----------------------------------------------------------------------------
bool
SetCurrentDirectory( const string& sDir)
{
return ( SetCurrentDirectoryW( stringtoW( sDir)) != 0) ;
}