📄 verinfo.c
字号:
switch (pValue->dwFileType)
{
case VFT_UNKNOWN:
Qstrcat (pqszStrings[i], "Unknown");
break;
case VFT_APP:
Qstrcat (pqszStrings[i], "Application");
break;
case VFT_DLL:
Qstrcat (pqszStrings[i], "Dynamic Link Library");
break;
case VFT_DRV:
switch (pValue->dwFileSubtype)
{
case VFT_UNKNOWN:
Qstrcat (pqszStrings[i], "Unknown");
break;
case VFT2_DRV_PRINTER:
Qstrcat (pqszStrings[i], "Printer");
break;
case VFT2_DRV_KEYBOARD:
Qstrcat (pqszStrings[i], "Keyboard");
break;
case VFT2_DRV_LANGUAGE:
Qstrcat (pqszStrings[i], "Language");
break;
case VFT2_DRV_DISPLAY:
Qstrcat (pqszStrings[i], "Display");
break;
case VFT2_DRV_MOUSE:
Qstrcat (pqszStrings[i], "Pointing Device");
break;
case VFT2_DRV_NETWORK:
Qstrcat (pqszStrings[i], "Network");
break;
case VFT2_DRV_SYSTEM:
Qstrcat (pqszStrings[i], "System");
break;
case VFT2_DRV_INSTALLABLE:
Qstrcat (pqszStrings[i], "Installable");
break;
case VFT2_DRV_SOUND:
Qstrcat (pqszStrings[i], "Sound");
break;
default:
Qstrcat (pqszStrings[i], "Unknown");
break;
}
Qstrcat (pqszStrings[i], " Driver");
break;
case VFT_FONT:
switch (pValue->dwFileSubtype)
{
case VFT2_UNKNOWN:
Qstrcat (pqszStrings[i], "Unknown Font Type");
break;
case VFT2_FONT_RASTER:
Qstrcat (pqszStrings[i], "Raster Font");
break;
case VFT2_FONT_VECTOR:
Qstrcat (pqszStrings[i], "Vector Font");
break;
case VFT2_FONT_TRUETYPE:
Qstrcat (pqszStrings[i], "True Type Font");
break;
default:
Qstrcat (pqszStrings[i], "Unknown Font Type");
break;
}
break;
case VFT_VXD:
Qstrcat (pqszStrings[i], "VxD");
break;
case VFT_STATIC_LIB:
Qstrcat (pqszStrings[i], "Static Library");
break;
default:
Qstrcat (pqszStrings[i], "Unknown");
}
PrepNextString (pqszStrings, i);
wCharCount += Qstrlen (pqszStrings[i++]) + 1;
/* File date */
/* This will have to wait until I learn how to calculate */
/* the number of 100-nanosecond intervals have occured */
/* since midnight, January 1, 1601 (the NT standard */
/* time/date stamp). */
}
{
/* String information */
WORD wSfiTotLength; /* StringFileInfo total length */
WORD wSfiValLength; /* StringFileInfo value length */
BYTE * pSfiVer; /* Pointer to start of StringFileInfo block */
/* Add a blank line */
pqszStrings[i][0] = '\0';
PrepNextString (pqszStrings, i);
wCharCount += Qstrlen (pqszStrings[i++]) + 1;
/* Set pVer to point to StringFileInfo */
pVer += sizeof (VS_FIXEDFILEINFO);
pVer = DWORDUP (pVer);
pSfiVer = pVer;
/* Set the length variables */
pWord = (WORD *) pVer;
wSfiTotLength = *pWord;
wSfiValLength = *(++pWord);
pVer += 4;
/* Add "StringFileInfo" */
Qstrcpy (pqszStrings[i], pVer);
PrepNextString (pqszStrings, i);
wCharCount += Qstrlen (pqszStrings[i++]) + 1;
/* Point to the first child */
pVer += strlen (pVer) + 1;
pVer = DWORDUP (pVer);
/* Get the String Table Blocks */
while (pVer < &pSfiVer[wSfiTotLength])
{
WORD wStTotLength; /* StringTable total length */
WORD wStValLength; /* StringTable value length */
WORD wLanguageId; /* Language ID of string info block */
WORD wCodePage; /* CodePage of string info block */
WORD u; /* Index variable */
BYTE * pStVer = pVer; /* Pointer to start of StringTable block */
/* Set the length variables */
pWord = (WORD *) pVer;
wStTotLength = *pWord;
wStValLength = *(++pWord);
pVer += 4;
/* Interpret the 8 digit hex number */
strncpy (chBuffer, pVer, 4);
chBuffer[4] = ' ';
strncpy (&chBuffer[5], &pVer[4], 4);
chBuffer[9] = '\0';
sscanf (chBuffer, "%x %x", &wLanguageId, &wCodePage);
/* Determine the Language ID */
Qstrcpy (pqszStrings[i], "Microsoft Language ID: ");
for (u = 0;
u < MAX_LANGUAGE_IDS && rgLang[u].wLanguageId != wLanguageId;
++u)
;
Qstrcat (pqszStrings[i], rgLang[u].pszLanguageId);
PrepNextString (pqszStrings, i);
wCharCount += Qstrlen (pqszStrings[i++]) + 1;
/* Determine the CodePage */
Qstrcpy (pqszStrings[i], "Windows CodePage: ");
for (u = 0;
u < MAX_CODEPAGE && rgCP[u].wCodePage != wCodePage;
++u)
;
Qstrcat (pqszStrings[i], rgCP[u].pszCodePage);
PrepNextString (pqszStrings, i);
wCharCount += Qstrlen (pqszStrings[i++]) + 1;
/* Point to the first child */
pVer += strlen (pVer) + 1;
pVer = DWORDUP (pVer);
/* Get the String blocks */
while (pVer < &pStVer[wStTotLength])
{
CHAR chBuffer[80]; /* String buffer */
WORD wSTotLength; /* StringTable total length */
WORD wSValLength; /* StringTable value length */
BYTE * pSVer = pVer; /* Pointer to start of String block */
/* Set the length variables */
pWord = (WORD *) pVer;
wSTotLength = *pWord;
wSValLength = *(++pWord);
pVer += 4;
/* Add the key string */
strcpy (chBuffer, pVer);
strcat (chBuffer, ": ");
wAlignColumn = max (wAlignColumn, strlen (chBuffer));
QstrcpyAlign (pqszStrings[i], chBuffer, wAlignColumn);
/* Add the value string */
pVer += strlen (pVer) + 1;
pVer = DWORDUP (pVer);
Qstrcat (pqszStrings[i], pVer);
PrepNextString (pqszStrings, i);
wCharCount += Qstrlen (pqszStrings[i++]) + 1;
/* Point to the next sibling */
pVer = pSVer + wSTotLength;
pVer = DWORDUP (pVer);
}
}
}
/* The last string must be a NULL pointer */
pqszStrings[i] = NULL;
/* Free up what memory we can */
_expand (pqszStrings, (i + 1) * sizeof (QSZ));
Qexpand (pqszStrings[0], wCharCount);
return (pqszStrings);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -