⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 verinfo.c

📁 Dos6.0
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -