アプリケーション情報を取得する。
環境:QT5.5
インクルードファイル
#include
#include
コード
//
// アプリケーション情報を取得
//
// アプリケーション名の取得(自分自身)
QString strFileName = QCoreApplication::applicationFilePath();
LPCTSTR lpFileName = reinterpret_cast(strFileName.utf16());
DWORD dwHand;
DWORD dwLen = GetFileVersionInfoSize( lpFileName, &dwHand );
if( dwLen == 0 ) {
return false;
}
UCHAR ucBuf[dwLen];
if( GetFileVersionInfo( lpFileName, dwHand, dwLen, ucBuf ) == 0 ) {
return false;
}
UINT nLen;
DWORD *dwLang;
WCHAR wcSubBlk[50];
wcscpy_s( wcSubBlk, 50, L"\\VarFileInfo\\Translation" );
if( VerQueryValue( ucBuf, wcSubBlk, (void**)&dwLang, &nLen ) == 0 ) {
return false;
}
QString strVersion = "";
QString strCompany = "";
QString strCopyright = "";
QString strProduct = "";
// バージョン情報
WCHAR wcLang[9];
WCHAR *wcBuffer;
WCHAR wcString[50];
wcscpy_s( wcString, 50, L"FileVersion" );
wsprintf( (LPWSTR)wcLang, (LPCWSTR)L"%04x%04x", LOWORD(*dwLang), HIWORD(*dwLang) );
wsprintf( (LPWSTR)wcSubBlk, (LPCWSTR)L"\\StringFileInfo\\%s\\%s", wcLang, wcString );
if( VerQueryValue( ucBuf, wcSubBlk, (void **)&wcBuffer, &nLen) != 0 ) {
strVersion = QString::fromStdWString(wcBuffer);
}
// 会社名
wcscpy_s( wcString, 50, L"CompanyName" );
wsprintf( (LPWSTR)wcLang, (LPCWSTR)L"%04x%04x", LOWORD(*dwLang), HIWORD(*dwLang) );
wsprintf( (LPWSTR)wcSubBlk, (LPCWSTR)L"\\StringFileInfo\\%s\\%s", wcLang, wcString );
if( VerQueryValue( ucBuf, wcSubBlk, (void **)&wcBuffer, &nLen) != 0 ) {
strCompany = QString::fromStdWString(wcBuffer);
}
// 著作権
wcscpy_s( wcString, 50, L"LegalCopyright" );
wsprintf( (LPWSTR)wcLang, (LPCWSTR)L"%04x%04x", LOWORD(*dwLang), HIWORD(*dwLang) );
wsprintf( (LPWSTR)wcSubBlk, (LPCWSTR)L"\\StringFileInfo\\%s\\%s", wcLang, wcString );
if( VerQueryValue( ucBuf, wcSubBlk, (void **)&wcBuffer, &nLen) != 0 ) {
strCopyright = QString::fromStdWString(wcBuffer);
}
// プロダクト名
wcscpy_s( wcString, 50, L"ProductName" );
wsprintf( (LPWSTR)wcLang, (LPCWSTR)L"%04x%04x", LOWORD(*dwLang), HIWORD(*dwLang) );
wsprintf( (LPWSTR)wcSubBlk, (LPCWSTR)L"\\StringFileInfo\\%s\\%s", wcLang, wcString );
if( VerQueryValue( ucBuf, wcSubBlk, (void **)&wcBuffer, &nLen) != 0 ) {
strProduct = QString::fromStdWString(wcBuffer);
}
return true;
コメント