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。
值 | 含义 |
---|---|
|
在 FILEMUIINFO 的 dwFileType 成员中检索以下值之一:
|
|
检索 FILEMUIINFO 的 pChecksum 成员中输入文件的资源校验和。 如果输入文件没有资源配置数据,则 结构的此成员包含 0。 |
|
检索与输入文件关联的语言。 对于特定于语言的资源文件,此标志请求关联的语言。 对于 LN 文件,此标志请求模块的最终回退资源的语言,该语言可以位于 LN 文件中,也可以位于 LN 文件的资源配置数据引用的特定于语言的单独资源文件中。 有关详细信息,请参见“备注”部分。 |
|
检索资源配置数据中指定的特定于语言的资源文件和 LN 文件中的资源类型的列表。 有关访问此信息的方法,请参阅“备注”部分。 |
[in] pcwszFilePath
指向以 null 结尾的字符串的指针,该字符串指示文件的路径。 通常,该文件是 LN 文件或特定于语言的资源文件。 如果它不是这些类型之一,则函数检索的唯一有效值是MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL。 仅当设置了MUI_QUERY_RESOURCE_TYPES标志时,函数才会检索此值。
[in, out, optional] pFileMUIInfo
指向缓冲区的指针,该缓冲区包含 FILEMUIINFO 结构中的文件信息,并且可能位于该结构后面的数据中。 信息缓冲区可能必须比结构本身的大小大得多。 根据标志设置,函数可以在 结构中检索到的偏移量存储结构后面的大量信息。 有关详细信息,请参见“备注”部分。
或者,如果将“0”设置为“0”,则应用程序可以将此参数设置为 NULL。 在这种情况下,该函数检索信息缓冲区的所需大小,该缓冲区位于 fileMUIInfo中。
[in, out] pcbFileMUIInfo
指向 pFileMUIInfo 指示的文件信息的缓冲区大小的指针(以字节为单位)。 从函数成功返回后,此参数包含检索到的文件信息缓冲区的大小以及包含该缓冲区的 FILEMUIINFO 结构。
或者,如果应用程序在 pFileMUIInfo 中设置 NULL,则可以将此参数设置为 0。 在这种情况下,该函数检索所需的文件信息缓冲区大小( 以号FileMUIInfo 为单位)。 若要分配正确的内存量,应将此值添加到 FILEMUIINFO 结构本身的大小中。
返回值
如果成功,则返回 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 成员包含特定于语言的资源文件中包含的资源名称数组的偏移量。
- dwTypeIDMainOffset 成员包含 LN 文件中包含的资源标识符数组的偏移量。
- dwTypeIDMainSize 成员包含 LN 文件的资源标识符数组的大小。
- dwTypeNameMainOffset 成员包含文件中包含的资源名称数组的偏移量。
DWORD *pdwTypeID = reinterpret_cast<DWORD *>(
reinterpret_cast<BYTE*>(pFileMUIInfo) +
pFileMUIInfo->dwTypeIDMainOffset);
LPWSTR lpszNames = reinterpret_cast<LPWSTR>(
reinterpret_cast<BYTE*>(pFileMUIInfo) +
pFileMUIInfo->dwTypeNameMainOffset);
另一种方法是编写以下内容,而不是示例中显示的代码。 效果是相同的,选择是严格的风格之一。
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 |