getFileMUIInfo 函数 (winnls.h)

检索有关文件的资源相关信息。

语法

BOOL GetFileMUIInfo(
  [in]                DWORD        dwFlags,
  [in]                PCWSTR       pcwszFilePath,
  [in, out, optional] PFILEMUIINFO pFileMUIInfo,
  [in, out]           DWORD        *pcbFileMUIInfo
);

参数

[in] dwFlags

指定要检索的信息的标志。 允许以下标志的任意组合。 标志的默认值为 MUI_QUERY_TYPE |MUI_QUERY_CHECKSUM。

含义
MUI_QUERY_TYPE
FILEMUIINFOdwFileType 成员中检索以下值之一:
  • MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL:指定的输入文件没有资源配置数据。 因此,它既不是 LN 文件,也不是特定于语言的资源文件。 这种类型的文件是较旧的可执行文件的典型类型。 如果指定了此文件类型,该函数将不会检索其他类型的有用信息。
  • MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN。 输入文件是 LN 文件。
  • MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI。 输入文件是与 LN 文件关联的特定于语言的资源文件。
MUI_QUERY_CHECKSUM
检索 FILEMUIINFOpChecksum 成员中输入文件的资源校验和。 如果输入文件没有资源配置数据,则 结构的此成员包含 0。
MUI_QUERY_LANGUAGE_NAME
检索与输入文件关联的语言。 对于特定于语言的资源文件,此标志请求关联的语言。 对于 LN 文件,此标志请求模块的最终回退资源的语言,该语言可以位于 LN 文件中,也可以位于 LN 文件的资源配置数据引用的特定于语言的单独资源文件中。 有关详细信息,请参见“备注”部分。
MUI_QUERY_RESOURCE_TYPES
检索资源配置数据中指定的特定于语言的资源文件和 LN 文件中的资源类型的列表。 有关访问此信息的方法,请参阅“备注”部分。

[in] pcwszFilePath

指向以 null 结尾的字符串的指针,该字符串指示文件的路径。 通常,该文件是 LN 文件或特定于语言的资源文件。 如果它不是这些类型之一,则函数检索的唯一有效值是MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL。 仅当设置了MUI_QUERY_RESOURCE_TYPES标志时,函数才会检索此值。

[in, out, optional] pFileMUIInfo

指向缓冲区的指针,该缓冲区包含 FILEMUIINFO 结构中的文件信息,并且可能位于该结构后面的数据中。 信息缓冲区可能必须比结构本身的大小大得多。 根据标志设置,函数可以在 结构中检索到的偏移量存储结构后面的大量信息。 有关详细信息,请参见“备注”部分。

或者,如果将“0”设置为“0”,则应用程序可以将此参数设置为 NULL。 在这种情况下,该函数检索信息缓冲区的所需大小,该缓冲区位于 fileMUIInfo中

注意 如果 pFileMUIInfo 的值不为 NULL,则必须将 dwSize 成员设置为 FILEMUIINFO 结构的大小, (包括信息缓冲区) ,并且 dwVersion 成员必须设置为当前版本的 0x001。
 

[in, out] pcbFileMUIInfo

指向 pFileMUIInfo 指示的文件信息的缓冲区大小的指针(以字节为单位)。 从函数成功返回后,此参数包含检索到的文件信息缓冲区的大小以及包含该缓冲区的 FILEMUIINFO 结构。

或者,如果应用程序在 pFileMUIInfo 中设置 NULL,则可以将此参数设置为 0。 在这种情况下,该函数检索所需的文件信息缓冲区大小( 以号FileMUIInfo 为单位)。 若要分配正确的内存量,应将此值添加到 FILEMUIINFO 结构本身的大小中。

注意如果 pFileMUIInfo 的值不为 NULL,则此参数的值必须与 FILEMUIINFOdwSize 成员的值匹配。
 

返回值

如果成功,则返回 TRUE ,否则返回 FALSE 。 若要获取扩展的错误信息,应用程序可以调用 GetLastError

注解

对于 MUI_QUERY_LANGUAGE_NAME 标志,此函数检索 dwLanguageNameOffset 成员中 FILEMUIINFO 开头的偏移量(以字节为单位)。

下面是访问与输入文件关联的语言名称的示例代码:

LPWSTR lpszLang = reinterpret_cast<LPWSTR>(
        reinterpret_cast<BYTE*>(pFileMUIInfo) +
        pFileMUIInfo->dwLanguageNameOffset);

对于 MUI_QUERY_RESOURCE_TYPES 标志,此函数检索以下 FILEMUIINFO 成员中特定于语言的资源文件信息:

  • dwTypeIDMUIOffset 成员包含特定于语言的资源文件中包含的资源标识符数组的偏移量。
  • dwTypeIDMUISize 成员包含特定于语言的资源文件的资源标识符数组的大小。
  • dwTypeNameMUIOffset 成员包含特定于语言的资源文件中包含的资源名称数组的偏移量。
如果输入文件是 LN 文件,则函数将填充上述所有结构成员。 此外,它还会填充以下成员:
  • dwTypeIDMainOffset 成员包含 LN 文件中包含的资源标识符数组的偏移量。
  • dwTypeIDMainSize 成员包含 LN 文件的资源标识符数组的大小。
  • dwTypeNameMainOffset 成员包含文件中包含的资源名称数组的偏移量。
下面是访问 LN 文件中资源标识符数组的示例代码。
DWORD *pdwTypeID = reinterpret_cast<DWORD *>(
        reinterpret_cast<BYTE*>(pFileMUIInfo) +
        pFileMUIInfo->dwTypeIDMainOffset);

注意 以相同的方式访问特定于语言的资源列表。
 
下面是用于访问 LN 文件中资源名称的多字符串数组的示例代码。
LPWSTR lpszNames = reinterpret_cast<LPWSTR>(
        reinterpret_cast<BYTE*>(pFileMUIInfo) +
        pFileMUIInfo->dwTypeNameMainOffset);

注意 以相同的方式访问特定于语言的资源列表。
 
每个代码示例都使用两个重新解释强制转换。 首先,代码强制转换为 BYTE*,以便偏移量的指针算术以字节为单位完成。 然后,代码将生成的指针强制转换为所需的类型。

另一种方法是编写以下内容,而不是示例中显示的代码。 效果是相同的,选择是严格的风格之一。

DWORD ix = pFileMUIInfo->dwLanguageNameOffset - 
        offsetof(struct _FILEMUIINFO, abBuffer);
LPWSTR lpszLang = reinterpret_cast<LPWSTR>(&(pFileMUIInfo->abBuffer[ix]));

C# 签名

[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
        static extern System.Boolean GetFileMUIInfo(
            System.UInt32 dwFlags,
            System.String pcwszFilePath,
            ref FILEMUIINFO pFileMUIInfo,
            ref System.UInt32 pcbFileMUIInfo
            );

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 winnls.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

FILEMUIINFO

GetThreadUILanguage

多语言用户界面

多语言用户界面函数

SetThreadPreferredUILanguages

SetThreadUILanguage