Winapi Shell32获取本地化问题的详细信息

Winapi Shell32获取本地化问题的详细信息,winapi,Winapi,是否有可靠的方法跨Windows平台识别文件的文件类型 我继承了一个程序,该程序使用Shell32 GetDetailsSof函数查询文件类型,如果使用非英语系统,则返回本地化字符串并导致错误(例如,在德语系统GetDetailsSof(项目9)上,返回“Bild”而不是“Image”).使用文件类型的文本描述不是识别特定文件类型的可靠方法。正如您所注意到的,描述字符串会随着语言的不同而变化,但它们也可能在一种语言内变化,具体取决于用户安装的软件(例如,一个.jpg文件可能在一个系统上有“JPE

是否有可靠的方法跨Windows平台识别文件的文件类型


我继承了一个程序,该程序使用Shell32 GetDetailsSof函数查询文件类型,如果使用非英语系统,则返回本地化字符串并导致错误(例如,在德语系统GetDetailsSof(项目9)上,返回“Bild”而不是“Image”).

使用文件类型的文本描述不是识别特定文件类型的可靠方法。正如您所注意到的,描述字符串会随着语言的不同而变化,但它们也可能在一种语言内变化,具体取决于用户安装的软件(例如,一个.jpg文件可能在一个系统上有“JPEG图像”和“Adobe Photoshop图像”的描述)在另一个系统上(如果用户安装了声明文件类型和更改描述的软件)

相反,识别文件类型的最佳方法是查看文件的扩展名(
.jpg
,在我们的示例中)。然后,如何使用它取决于您自己,取决于您的应用程序。您可能只是有一个使用的扩展名的硬编码列表,或者为了更通用,您可以在注册表中查找文件类型的“感知类型”:

HKEY_CLASSES_ROOT\.jpg\PerceivedType


要查看该值是否设置为“图像”、“音频”等,是否可以定义“文件类型”?文件类型为“图像”、“视频”、“文本”、“可执行文件”等。这根本不是定义。如果我为每个文件返回“Image”可以吗?不,我不这么认为。您希望程序如何决定文件类型。基本上,程序当前会根据shell函数返回的filtetype打开一个编辑器。所以,如果它是一个图像文件,它对图像使用一些WPF函数,对视频、音频等也一样。这就是我需要澄清的。我检查了MSDN上的描述,但它甚至没有提到这里使用的iColumn参数。例如,我注意到2给了我“Paint.NET image”(如您所述),但是传递9返回“image”,传递11返回“Picture”。这似乎是一种非常明智的方法。我想查看文件扩展名是一种方法。谢谢各位。