Files
EgtGeneral/GetModuleVer.cpp
T
DarioS 08658f7bdd EgtGeneral 2.5e3 :
- aggiunta gestione deposito dati chiave di protezione in uso.
2023-05-30 10:23:19 +02:00

88 lines
2.8 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)
{
// imposto versione a non trovata
sVer = "0.0_0" ;
// trovo nome del file dato l'hInstance
wchar_t szFileName[_MAX_PATH] ;
::GetModuleFileNameW( hModule, szFileName, _MAX_PATH) ;
// mi faccio dare il buffer delle informazioni dal file
DWORD dwNULL ;
DWORD dwSize = ::GetFileVersionInfoSizeW( szFileName, &dwNULL) ;
if ( dwSize == 0)
return false ;
LPVOID lpData = malloc( size_t( dwSize));
if ( lpData == nullptr)
return false ;
GetFileVersionInfoW( szFileName, dwNULL, dwSize, lpData) ;
// Chiedo le info standard
bool bOk = false ;
LPVOID lpUsefulData ;
UINT dwUsefulSize ;
if ( ::VerQueryValueW( lpData, L"\\", &lpUsefulData, &dwUsefulSize)) {
VS_FIXEDFILEINFO* 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 ;
}
// disalloco il buffer
free( lpData) ;
return bOk ;
}
//-----------------------------------------------------------------------------
bool
GetModuleDirectory( HINSTANCE hModule, string& sDir)
{
// trovo path del file dato l'hInstance
wchar_t szFileNameW[_MAX_PATH] ;
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) ;
}