/* 「プロジェクト」→「設定」を選び、「リンク」グループの中の 「オブジェクト/ライブラリモジュール」の欄に、 version.lib を追加する必要があります。 */ #include #include #include #include int GetFileVersion(char *FileName) { unsigned long SizeOfVersionInfo, dummy; unsigned int LengthVersionInfo; DWORD *PointerVersionInfo; void *buf; char buffer[4096], *textver; if (FileName[0] == '\0') return 1; if ((SizeOfVersionInfo = GetFileVersionInfoSize(FileName, &dummy)) == 0) { printf("%s File not found or unknown.\n", FileName); return 1; } if ((buf = malloc(SizeOfVersionInfo)) == NULL) { puts("Error! Not enough memory to load version information."); exit(1); } GetFileVersionInfo(FileName, 0, SizeOfVersionInfo, buf); VerQueryValue(buf, "\\VarFileInfo\\Translation", (void **) &PointerVersionInfo, &LengthVersionInfo); sprintf(buffer, "\\StringFileInfo\\%04X%04X\\FileVersion", LOWORD(*PointerVersionInfo), HIWORD(*PointerVersionInfo)); VerQueryValue(buf, buffer, (void**) &textver, &LengthVersionInfo); printf("%-12s %s\n" , FileName, textver); free(buf); return 0; } int main(void) { char buffer[256], *cr; FILE *fp; if ((fp = fopen("Target.txt", "r")) == NULL) { puts("Target.txt not found."); return 1; } puts("Listing of file versions."); while (!feof(fp)) { if (fgets(buffer, 256, fp) == NULL) break; if ((cr = strchr(buffer, '\n')) != NULL) *cr = '\0'; GetFileVersion(buffer); } fclose(fp); puts("Press \"Enter\" to quit."); getchar(); return 0; }