#include #include #pragma comment(lib, "Version.lib") void GetFileVersion(const wchar_t* filename) { DWORD verHandle = 0; UINT size = 0; LPBYTE lpBuffer = NULL; DWORD verSize = GetFileVersionInfoSizeW(filename, &verHandle); if (verSize != 0) { LPVOID verData = malloc(verSize); if (verData) { if (GetFileVersionInfoW(filename, 0, verSize, verData)) { if (VerQueryValueW(verData, L"\\", (LPVOID*)&lpBuffer, &size)) { if (size) { VS_FIXEDFILEINFO* verInfo = (VS_FIXEDFILEINFO*)lpBuffer; if (verInfo->dwSignature == 0xfeef04bd) { printf("ファイルバージョン: %d.%d.%d.%d\n", (verInfo->dwFileVersionMS >> 16) & 0xffff, (verInfo->dwFileVersionMS) & 0xffff, (verInfo->dwFileVersionLS >> 16) & 0xffff, (verInfo->dwFileVersionLS) & 0xffff); } else { printf("ファイルバージョン情報が見つかりませんでした。\n"); } } else { printf("サイズが0です。\n"); } } else { printf("VerQueryValueW関数が失敗しました。エラーコード: %d\n", GetLastError()); } } else { printf("GetFileVersionInfoW関数が失敗しました。エラーコード: %d\n", GetLastError()); } free(verData); } else { printf("メモリの割り当てに失敗しました。\n"); } } else { printf("GetFileVersionInfoSizeW関数が失敗しました。エラーコード: %d\n", GetLastError()); } } int main() { const wchar_t* filename = L"C:\\Windows\\notepad.exe"; // ファイルへのパスを指定してください GetFileVersion(filename); return 0; }