Delphi和CSIDL_LOCAL_APPDATA与FOLDERID_LocalAppData

时间:2016-10-07 02:14:50

标签: windows delphi

我在Win7 x64上使用Delphi XE2,为Win32编译。

我已经开始使用CSIDL_LOCAL_APPDATA为我的第一个软件版本设计安装。

我在MSDN上看到,从Vista开始,MS希望我们开始使用KNOWNFOLDERID值而不是CSIDL值:

但是,当我尝试将GetSpecialFolderPath(CSIDL_LOCAL_APPDATA,false)替换为GetSpecialFolderPath(FOLDERID_LocalAppData,false)时,XE2无法识别FOLDERID_LocalAppData

我认为既然XE2在Vista之后很久就出现了,那么应该(如果你原谅我)在{{1}中支持/识别这些常量(?)在XE2中。

如果没有,有人知道Win10是否仍能识别Winapi.Windows值吗?

1 个答案:

答案 0 :(得分:4)

并非Delphi本身支持的Win32 API中的所有内容都在Winapi.Windows单元中实现。例如,CSIDL单位实施Winapi.SHFolder支持,KNOWNFOLDERID单位实施Winapi.KnownFolders支持(是的,确实存在于XE2中)。

GetSpecialFolderPath()不是本机Delphi函数,因此您必须使用第三方代码。 CSIDLInteger传递给SHGetFolderPath()(或更早版CSIDL的函数),而KNOWNFOLDERIDTGuid传递给FOLDERID_...改为SHGetKnownFolderPath()。因此,您不能只将GetSpecialFolderPath()常量传递给CSIDL,除非它已被重载以接受KNOWNFOLDERID$http.post( url, data, config)作为输入。