DLL にコンパイルするプロジェクトと、手動で追加したリソース ファイルがあります。リソース ファイルを検索し、それらから情報とデータを取得するのに役立つ Win32 API を探しています (C++ を使用)。
たとえば、会社名またはバージョンを取得するには..
誰でも私を助けることができますか?
ありがとう。
DLL にコンパイルするプロジェクトと、手動で追加したリソース ファイルがあります。リソース ファイルを検索し、それらから情報とデータを取得するのに役立つ Win32 API を探しています (C++ を使用)。
たとえば、会社名またはバージョンを取得するには..
誰でも私を助けることができますか?
ありがとう。
TEXT("CompanyName") を lpszVersionType として渡して以下の関数を呼び出します `
#pragma comment(lib, "version.lib")
BOOL GetVersionString(LPCTSTR lpszModuleFileName, LPCTSTR lpszVersionType, LPTSTR lpszVersionString)
{ int i, j;
unsigned long u;
LPTSTR pBlock, pTmpVersion;
TCHAR buf[_MAX_PATH];
BOOL bRet = FALSE;
struct LANGANDCODEPAGE
{ WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
if ((i = GetFileVersionInfoSize(lpszModuleFileName, &u)) == 0) // !!
return FALSE;
i++;
pBlock = (LPTSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, i * sizeof(TCHAR));
if (pBlock == NULL) // !!
return FALSE;
if (GetFileVersionInfo(lpszModuleFileName, u, i, pBlock))
{ VerQueryValue(pBlock, TEXT ("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, (UINT *)&u); // // Read the list of languages and code pages
j = (int)(u/sizeof(struct LANGANDCODEPAGE));
for (i = 0; i < j; i++)
{ wsprintf(buf, TEXT ("\\StringFileInfo\\%04x%04x\\%s"), lpTranslate[i].wLanguage, lpTranslate[i].wCodePage, lpszVersionType);
VerQueryValue(pBlock, buf, (void **)&pTmpVersion, (UINT *)&u);
if (u > 0)
{ lstrcpy(lpszVersionString, pTmpVersion);
bRet = TRUE;
break;
}
}
}
HeapFree(GetProcessHeap(), 0, pBlock);
return bRet;
}
`