アプリケーション情報を取得する。
環境:QT5.5
インクルードファイル
1 2 | #include <windows.h> #include <QString> |
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | // // アプリケーション情報を取得 // // アプリケーション名の取得(自分自身) QString strFileName = QCoreApplication::applicationFilePath(); LPCTSTR lpFileName = reinterpret_cast<LPCTSTR>(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; |
コメント